从不同角度简单阐述消息机制

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的讲解

原文地址:https://www.cnblogs.com/tingshuixuan2012/p/3115936.html