一、事件与消息

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

typedef struct tagMSG
{
    HWND hwnd;//产生消息的窗口句柄(事件的产生地点)
    <strong>UINT    message;//消息的标识码(事件种类)</strong>
    WPARAM    wParam;//消息的附加信息1
    LPARAM    lParam;
    DWORD    time;//消息产生的时刻
    POINT       pt;//光标的位置
}MSG;
“消息”结构定义如下
部分常用的Windows(窗口)消息
消息的标识 说明
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()获取并通过系统发送给窗口(鼠标/键盘)——队列消息;

②不经消息队列而直接送达窗口(系统事件产生的消息)——非队列消息

 

posted on 2017-08-02 18:18  HANCAO  阅读(743)  评论(0编辑  收藏  举报