Windows消息机制
一、Windows消息机制概念&原理:
一个事件从发生到达处理它的窗口处理函数必须经历以上过程。消息是非抢占式的,总是按到达的先后排队。这也有弊端,就是可能导致一些要求实时事件不能及时得到处理。
就MFC框架来说,App全局对象执行构造结束后紧接着就调用函数WinMain(),函数WinMain调用消息循环,消息循环负责从应用程序消息队列里取消息并交给os去分发给对应的窗口,消息循环如下。
while( GetMessage(&msg) >0 ) { TranslateMessage(&msg); DispatchMessage(&msg); }
程序入口 :WINAPI WinMain->定义窗口类->注册窗口类函数RegisterClass->生成窗口函数CreateWindow->显示窗口函数ShowWindow->消息循环->窗口消息处理(回调函数) LRESULT CALLBACK WndProc。
一个消息处理完成,窗口过程WinPro函数返回,DispatchMessage()函数返回,应用程序的消息循环继续while循环,Window系统继续监控各类消息,重复这个过程。
二、消息在Windows中的定义:
struct tagMsg { HWND hwnd; //接受该消息的窗口句柄 UINT message; //消息常量标识符,也就是我们通常所说的消息号 WPARAM wParam; //32位消息的特定附加信息,确切含义依赖于消息值 LPARAM lParam; //32位消息的特定附加信息,确切含义依赖于消息值 DWORD time; //消息创建时的时间 POINT pt; //消息创建时的鼠标/光标在屏幕坐标系中的位置 }MSG;
三、消息的分类: