一、事件与消息
凡是需要程序产生相应动作的原因或刺激都是事件(键盘的输入、鼠标的点击)。|Windows定义了一个用以表示信息的结构——消息。

typedef struct tagMSG { HWND hwnd;//产生消息的窗口句柄(事件的产生地点) <strong>UINT message;//消息的标识码(事件种类)</strong> WPARAM wParam;//消息的附加信息1 LPARAM lParam; DWORD time;//消息产生的时刻 POINT pt;//光标的位置 }MSG;
消息的标识 | 说明 |
WM_LBUTTONDOWN | 按下鼠标左键 |
WM_LBUTTONUP | 放开鼠标左键 |
WM_RBUTTONDOWN | 按下鼠标右键 |
WM_RBUTTONUP | 放开鼠标右键 |
WM_LBUTTONDBLCLK | 双击左键 |
WM_RBUTTONDBLCLK | 双击右键 |
WM_CHAR | 按下非系统键时产生的消息,其中wParam为键的ASCLL码 |
WM_CREATE | 由CreatWindow()函数产生的消息 |
WM_CLOSE | 关闭窗口时产生的消息 |
WM_DESTROY | 消除窗口 |
WM_QUIT | 退出程序时,由PostQuitMessage()函数产生的消息 |
WM_PAINT | 需要窗口重画时产生的消息 |
二、消息队列和消息循环
为了在消息的产生比较密集时不会丢失消息以及对消息进行有序的处理,系统为每个应用程序都建立了叫做消息队列的存储空间。并且通过API函数GetMessage()使应用程序能从消息队列获取消息。

while(GetMessage(&msg,NULL,NULL,NULL)) { TranslateMessage(&msg); DispatchMessage(&msg); }
三、消息的派送和处理
从消息的传输途径来看,消息大体分为两种:
①先把消息送达消息队列,然后由应用程序中的消息循环通过函数DispatchMessage()获取并通过系统发送给窗口(鼠标/键盘)——队列消息;
②不经消息队列而直接送达窗口(系统事件产生的消息)——非队列消息