1 消息机制的要点:
消息队列:先进先出
消息循环:通过循环while,不断的从消息队列中取得队首消息,并分发消息。
消息处理:根据不同的消息类型做不同的处理
事件:事件响应函数
2 消息机制
_tWinMain
{
// 注册窗口类
if(!AppRegisterClass(hInstance)) // hInstance 是应用程序句柄,把这个和winproc注册上。
{
return (FALSE);
}
// 初始化应用程序窗口
if (!InitInstance (hInstance, nCmdShow)) // 注册之后开始初始化应用窗口(createWindow得到g_hWnd ;ShowWindow(); UpdateWIndow)_)
{
return FALSE;
}
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) //定义消息处理函数
wndProc会根据message类型调用对应的事件响应函数。
onDraw () // 每次刷新的时候都会重新绘制。
对于每一个正在执行的Windows应用程序,系统为其建立一个"消息队列",也就是应用程序队列
DispatchMessage会将消息传递给窗口函数,也就是WndProce函数。
WndProc是一个回调函数,在注册窗口时通过wcex.lpfnWndProc将其传递给了OS,所以DispatchMessage分发消息后,OS会调用
Wndproc去处理。
消息的定义和类型:
windows消息都以WM_为前缀,WM_PAINT.
typedef struct tagMsg
{
HWND hwnd; //接受该消息的窗口句柄
UINT message; //消息常量标识符,也就是我们通常所说的消息号
WPARAM wParam; //32位消息的特定附加信息,确切含义依赖于消息值
LPARAM lParam; //32位消息的特定附加信息,确切含义依赖于消息值
DWORD time; //消息创建时的时间
POINT pt; //消息创建时的鼠标/光标在屏幕坐标系中的位置
}MSG;
消息主要有3种类型:
A: 命令消息:
B: 标准窗口消息:
C: Notification:
队列消息和非队列消息: 按照是否需要放入队里
POSMessage 与 SendMessage:
POSMessage:发送到消息对列
SendMessage:非对列消息。直接发送窗口,等待执行结束。