MFC消息处理机制

来源:互联网 发布:python split() 编辑:程序博客网 时间:2024/05/23 01:02

Windows消息处理机制

Windows把来自硬件(键盘,鼠标)的消息和来自应用程序的消息放在Windows消息队列中。应用程序有自己的消息队列,即线程消息队列。

Windows获取到消息放置在消息队列,然后发送给程序的线程消息队列,最后线程队列每次取出一条消息发送到指定窗口,不断取出消息(循环),直到结束。

这个循环就是靠消息环(while(GetMessage()) TranslateMessage();DispatchMessage();实现的.

GetMessage()只是从线程消息中取出一条消息,TranslateMessage()把virtue key消息转化成character消息,如VK_F1会转化成WM_HELP,而DispatchMessage  则把取出的消息发送到目的窗口.如果收到WM_CLOSE消息则结束循环,发送postqiutmessage(0),处理WM_DESTROY销毁窗口!

while (GetMessage(&msg, NULL, 0, 0))          //C++ code{    TranslateMessage(&msg);  DispatchMessage(&msg);}
百度百科:PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当你需要在MFC之前处理某些消息时,常常要在这里添加代码. MFC消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,我们可以改变MFC的消息控制流程,甚至可以作一个全新的控制流出来。只有穿过消息队列的消息才受PreTranslateMessage()影响,采用SendMessage()或其他类似的方式向窗口直接发送的而不经过消息队列的消息根本不会理睬PreTranslateMessage()的存在。

原创粉丝点击