MFC的核心概念

API是英文Application Programming Interface 的缩写,意思是“应用程序接口”,泛指系统为应用程序提供的一系列函数接口,在编程时可以直接调用,而不必知道其内部实现的过程,只知道它的原型和返回值就可以了

SDK是英文Software Development Kit的缩写,意思是“软件开发工具包” 微软提供了许多专门的SDK开发包,比如DirectX开发包和语音识别开发包等

向下的箭头③表示应用程序可以通知操作系统执行某个具体的动作。 如操作系统能够控制声卡发出声音,但它并不知道应该何时发出何种声音,需要应用程序告诉操作系统该发出什么样的声音。

应用程序是如何通知操作系统执行某个功能的呢?

在应用程序中要完成某个功能,都是以函数调用的形式实现的,同样,应用程序也是以函数调用的方式来通知操作系统执行相应的功能的。

操作系统所能够完成的每一个特殊功能通常都有一个函数与其对应,也就是说,操作系统把它所能够完成的功能以函数的形式提供给应用程序使用,

应用程序对这些函数的调用就叫做系统调用,这些函数的集合就是 windows操作系统提供给应用程序编程的接口Windows API。

如CreateWindow就是一个API函数,应用程序中调用这个函数,操作系统就会按照该函数提供的参数信息产生一个相应的窗口。

事件(Event)是对计算机操作的动作。每个事件对应一个消息,即每个事件发生的效果是产生消息。

消息(Message)是描述事件发生的信息。 比如:按键事件——按下键的消息、字符消息和键弹起的消息程序执行的顺序取决于事件发生的顺序,

但是消息的产生并不要求有次序之分。

向上的箭头④表示操作系统能够将输入设备的变化上传给应用程序。

如用户在某个程序活动时按了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的是哪一个键,操作系统并不决定对这一事件如何作出反应,

而是将这一事件转交给应用程序,由应用程序决定如何对这一事件作出反应。好比有个蚊子叮了我们一口,我们的神经末梢(相当于操作系统)马上感知到这一事件,

并传递给了我们的大脑(相当于应用程序),我们的大脑最终决定如何对这一事件作出反应,如将蚊子赶走,或是将蚊子拍死。对事件作出反应的过程就是消息响应。

消息是应用程序和计算机交互的途径,在计算机上几乎做每一个动作都会产生一个消息。

鼠标被移动会产生WM_MOUSEMOVE消息; 鼠标左键被按下会产生WM_LBUTTONDOWN的消息; 鼠标右键按下便产生WM_RBUTTONDOWN消息等。

操作系统是怎样将感知到的事件传递给应用程序呢?这是通过消息机制(Message)来实现的。

操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序,参看MSDN。

消息的组成: 消息号+字参数+长字参数

消息号事先定义好。

字参数(wParam)长字参数(lParam)提供附加信息,含义和具体消息号相关。

Windows系统有一个存放消息的队列。 每个应用程序也有一个消息队列。

Windows系统先将收到的消息存放在系统队列中。 然后再分发到相应的应用程序队列中。

应用程序则从自身的队列中获取消息并进行处理。

创建消息循环

Windows程序至少包含两个函数:

WinMain ( ) : 必有且仅有一个

窗口函数 : 每个窗口对应一个窗口函数,以响应该窗口的消息

通常每个Windows 应用程序至少对应一个窗口,每个窗口都要有一个窗口函数负责处理该窗口内所发生的事件

While (GetMessage(&msg,(HWND)NULL,0,0))

{

   TranslateMessage(&msg); // 转换某些键盘消息

  DispatchMessage(&msg); // 将消息发送给窗口过程, 例程中指WndProc

}

何时退出 ?

// 当从应用程序消息队列中检取的消息是

// WM_QUIT时,则退出循环

PostMessage和SendMessage

PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行 这是个异步消息投放函数,会造成消息的滞后性

SendMessage必须等待其他程序处理消息完了之后才返回,继续执行这是个同步消息投放函数,不会造成消息的滞后性。但如果消息处理失败,则会造成程序停止

PostMessage的返回值表示PostMessage函数执行是否正确

SendMessage的返回值表示其他程序处理消息后的返回值

使用示例

PostQuitMessage(nExitCode) 功能: 发送WM_QUIT消息给系统, 以通知系统应用程序要结束。

WM_QUIT消息只能用PostMessage,因为该消息将导致应用程序释放消息环,也就无法返回结果 。

SendDlgItemMessage( … ) 功能: 向对话框控件发送消息 相当于先用GetDlgItem()得到控件句柄,再 SendMessage(),是一种组合的方便方式。

时间: 2024-08-29 05:33:49

MFC的核心概念的相关文章

MFC六大核心机制之二:运行时类型识别(RTTI)

上一节讲的是MFC六大核心机制之一:MFC程序的初始化,本节继续讲解MFC六大核心机制之二:运行时类型识别(RTTI). typeid运算子 运行时类型识别(RTTI)即是程序执行过程中知道某个对象属于某个类,我们平时用C++编程接触的RTTI一般是编译器的RTTI,即是在新版本的VC++编译器里面选用“使能RTTI”,然后载入typeinfo.h文件,就可以使用一个叫typeid()的运算子,它的地位与在C++编程中的sizeof()运算子类似的地方(包含一个头文件,然后就有一个熟悉好用的函数

Hadoop hdfs&mapreduce核心概念

1.HDFS(分布式文件系统体系) 1.1.NameNode:(名称节点) Hdfs的守护程序 记录文件是如何分割成数据块的,以及这些数据块被存储到了哪些节点上 对内存和I/O进行集中管理 是个单点,发生故障将使集群崩溃 1.2.SecondaryNamenode(辅助名称节点):发生故障进行人工的设置才能实现集群崩溃的问题 监控HDFS状态的辅助后台程序 每个集群都有一个 与NameNode进行通讯,定期保存HDFS元数据快照 与NameNode故障可以作为备用NameNode使用 1.3.D

CSS的四个核心概念

CSS(Cascading Style Sheet)层叠样式表,又称级联样式表,是一组格式设置规则,用来进行网页风格设计.通过使用CSS样式设置页面的格式,可将页面的内容与表现形式分离.页面内容存放在HTML文档中,而用于定义表现形式的CSS规则则存放在另一个文件中或HTML文档的某一部分,通常为文件头部分.将内容与表现形式分离,不仅可使维护站点的外观更加容易,而且还可以使HTML文档代码更加简练,缩短浏览器的加载时间. CSS的核心概念有四个:标准流.盒模型.position.float,它们

Maven的几个核心概念

POM (Project Object Model) 一个项目所有的配置都放置在 POM 文件中:定义项目的类型.名字,管理依赖关系,定制插件的行为等等.比如说,你可以配置 compiler 插件让它使用 java 1.5 来编译. 示例的 POM: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

Win32/MFC的基本概念

一.MFC的基本概念 单文档.多文档和对话框框架的区别 MFC中的类继承图的基本框架 CView类与CDocument的关系 Onpaint()和Ondraw()的关系 hdc-cdc区别联系 RUNTIME_CLASS是什么 DECLARE_DYNAMIC 和 IMPLEMENT_DYNAMIC DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE DECLARE_SERIAL 和 IMPLEMENT_SERIAL RUNTIME_CLASS宏的定义是这样的: #de

C#面向对象的核心概念

一.面向对象的核心概念 (一)抽象--面向对象的根基 讲到抽象,不得不涉及到现代科学技术的基础--数学. 数学是一门抽象的科学,面对着纷繁复杂的世间万物,数学不理会各种事物的独特特性,而只抽取它们在数量上的特性,深刻揭示了"世间万物"在数量上表现出的共同规律,抽象正是数学的本质特征. 数学的一个分支--离散数学是计算机科学的根基之一,因此,计算机科学从诞生之日起,就与数学有着密不可分的联系,抽象思维也是计算机科学的主要思维方法之一. 在使用面向对象的方法设计一个软件系统时,首先就要区分

Angularjs的核心概念

1. 客户端模板 多页面的应用通过组装和拼接服务器上的数据来生成HTML,然后输出到浏览器.Angularjs不同于此的是,传递模板和数据到浏览器,然后在浏览器端进行组装.浏览器的角色编程了只提供模板的静态资源和模板所需要的数据. <html ng-app> <head> <script src="angular.js"></script> <script src="controllers.js"><

面向对象的核心概念

1.面向对象的核心概念 从理论上说,面向对象技术拥有四大基本特性. (1)封装 这是一种隐藏信息的特征.封装这一特性不仅大大提高了代码的易用性,而且还使得类的开发者可以方便的更换新的算法,这种变化不会影响使用类的外部代码.可以用以下公式展示类的封装特性: 封装的类=数据+对此数据所进行的操作(即算法) 通俗的说,封装就是:包起外界不必需要知道的东西,只向外界展露可供展示的东西. 在面向对象理论中,封装这个概念拥有更为宽广的含义.小到一个简单的数据结构,大到一个完整的软件子系统,静态的如某软件系统

理解maven的核心概念

原文链接:http://www.cnblogs.com/holbrook/archive/2012/12/24/2830519.html 好久没进行java方面的开发了,最近又完成了一个java相关的任务,顺便重新体会了 maven 这一利器. 在使用过程中发现以前对maven的理解不够深入,借此机会重新梳理了一下maven的核心概念.相信理解了这些核心概念, 即使长时间不使用,以后再重新上手也会非常容易. 本文以类图的方式,介绍maven核心的12个概念以及相互之间的关系. Table of