1.1 Windows 程序运行原理(消息循环和响应)(2)
发布时间:2021-06-07
发布时间:2021-06-07
是学不好VC++的了。
注意:请不 要将这里的API与java API以及其他API混淆。API正如其语义一样,已成为一种被广泛使用的专业术语。如果某个系统或某个设备提供给某种应用程序对其进行编程操作的函数, 类,组件等的集合,就称作该系统的API。
2.关于消息和事件
Windows程序是事件驱动的,所谓事件就是应用程 序做了什么事情或是程序用户通过输入设备做了哪些事情(比如移动鼠标)。
操作系统能够将输入设备的变化上传给应用程序。如用户在某个程序活动 时按了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的是哪一个键,操作系统并不决定对这一事件如何做出反应,而是将这一事件转交给应 用程序,由应用程序决定如何对这一事件做出反应。对事件做出反应的过程就是消息响应。
操作系统是怎样将感知到的事件传递给应用程序的 呢?这是通过消息机制来实现的。操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序的,参看MSDN,MSG结构定义如下:
typedef struct tagMSG { // msg
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
看不懂这种定义的读者,请赶快复习C语言,其基本意义是定义一个struct tagMSG的结构体,并在以后的应用中用MSG来代替struct tagMsg。该结构体中各成员变量的作用如下:
第一个成员变 量hwnd即代表消息所属的窗口,一个消息一般都是与某个窗口相联系的,如在某个活动窗口中按下键盘,该键盘消息就是发给该窗口的,在VC中,用HWND 变量类型来标识窗口。有关窗口的知识,在稍后有详细解释。
第二个成员变量message代表消息代号,无论是键盘按下,还是鼠标移 动,都是用一个数字来表示的,不同的数值对应不同的消息。由于数值不便于记忆,在VC中将消息对应的数值定义为WM_xxx宏的形式,xxx对应某种消息 的英文拼写的大写,如鼠标移动消息为WM_MOUSEMOVE,键盘按下消息为WM_KEYDOWN,输入一个字符消息为WM_CHAR等等。我们在程序 中一般以WM_xxx宏的形式来使用消息。
提示:如果想知道WM_xxx消息对应的具体数值,请在程序中选中WM_xxx,单击右 键,在弹出菜单中选择goto definition即可看到该宏的具体定义。跟踪,查看某个变量的定义,使用此方法非常有效。
第三个,四个成员变量分别为wParam,lParam,用于对消息进行补充说明,如message成员表示字符消息,但没有说明输入的是哪个字符,这就需要 用其他变量对其进行补充说明。wParam,lParam代表的意义,
下一篇:三维随机分形地形生成