while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; }
这是WinMain函数中典型的消息循环。GetMessage函数从消息队列中取出下一条消息,填入msg结构字段。DispatchMessage函数调用此窗口的消息过程。
在这两个函数之间是Translate函数,它负责把击键消息转换为字符消息。
——以上内容摘自《Windows程序设计》189页
_________________________________________________________________________
《Windows程序设计》第54页有下面几段话:
【下面的语句将msg结构返还给Windows以进行某些键盘消息的转换:
TranslateMessage (&msg) ;
而以下语句则讲msg结构在此返还给Windows:
DispatchMessage (&msg) ;
接下来,Windows会将这条消息发送给合适的窗口过程来处理。】
【窗口过程总是按照如下方式来定义:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
窗口过程的四个参数与MSG结构的前四个字段是一一对应的。第一个参数是hwnd,表示接收消息的窗口的句柄。
第二个参数与MSG结构的message字段对应,是一个标识消息的数字。
最后两个参数是32位的消息参数,用于提供该消息的更丰富信息。这些参数中所包含的内容依赖于具体的消息类型。
】
从上面摘录的最后一段可以得出,平时用到的wParam和lParam是结构MSG的成员,与MSG的message成组出现,用于“提供该消息的更丰富信息”。
理解了这些,对理解整个消息机制有极大帮助。
58~61页的《Windows编程中的若干难点》对消息机制做了更多的阐述,至此,消息机制可以告一段落。注意59页底部对DefWindowProc的讲解