1、消息
(1)消息
是Windows发出的一个通知,告诉应用程序某个事情发生。Windows中,消息使用同一的结构体来存放消息。
typedef struct tagMSG{
HWND hwnd; //窗口句柄
UINT message; //消息常量标识符
WPARAM wParam; //32位消息的特定附加消息
LPARAM lParam; //32位消息的特定附加消息
DWORD time; //消息创建的时间
POINT pt; //消息创建时的鼠标位置
}MSG;
typedef struct POINT{
int x;
int y;
};
参数:
- hwnd:32位窗口句柄。窗口可以是任何类型的屏幕对象,如窗口、对话框、按钮、编辑框等
- message:用于区别其他消息的常量值,即用来表明消息的意义,在Windows中,消息是由一个数值来表示的,不同的消息对应不同的数值。通常是以WM_XX宏表示消息,如字符消息WM_CHAR。
- wParam:通常是一个与消息有关的常量值,也可能是窗口或控件的句柄
- lParam:通常是指向内存中数据的指针。和wParam实际为unsigned int和long
- pt:消息创建时的鼠标位置
(2)消息分类
从消息的来源来看,可以分为:系统定义的消息和应用程序定义的消息。系统消息ID的范围是从0到WM_USER-1,或0X80000到0XBFFFF;应用程序消息从WM_USER(0X0400)到0X7FFF,或0XC000到0XFFFF;WM_USER到0X7FFF范围的消息由应用程序自己使用;0XC000到0XFFFF范围的消息用来和其他应用程序通信,为了ID的唯一性,使用::RegisterWindowMessage来得到该范围的消息ID。
- a、窗口消息:即与窗口的内部运作有关的消息,如创建窗口,绘制窗口,销毁窗口等。
- 可以是一般的窗口,也可以是MainFrame,Dialog,控件等。 如:WM_CREATE, WM_PAINT, WM_MOUSEMOVE, WM_CTLCOLOR, WM_HSCROLL等
- b、命令消息(WM_COMMAND):当用户从菜单选中一个命令项目、按下一个快捷键或者点击工具栏上的一个按钮,都将发送WM_COMMAND命令消息。
- c、控件通知:WM_NOTIFY为扩展WM_COMMAND消息。
- d、自定义消息:使用SendMessage和PostMessage发送消息
注:常用Windows消息
- e、消息调用窗口时的输出参数:
句柄:唯一地标识窗口的32位值,该值引用一个数据结构,包含窗口的大小、风格、屏幕上的位置。
消息ID:用来标识消息类型的一个数值WM_CREATE、WM_PRINT等。
wParam + lParam:包含特定消息类型的信息。如,当一个WM_LBUTTONDOWN消息到达时,wParam保存一系列位标志来标识Ctrl和Shift键及鼠标按钮的状态。当鼠标单击发生时,lParam保存两个16位值来标识鼠标指针的位置。这些参数一起向窗口过程提供他所需要的处理WM_LBUTTONDOWN消息的所有信息。