转自:http://hi.baidu.com/bellgrade/blog/item/4b1c61c395a7d73ce4dd3b78.html
MFC中处理消息的顺序
1.AfxWndProc()接收消息,寻找消息所属的CWnd对象,然后调用AfxCallWndProc( )。
2.AfxCallWndProc()存储消息(消息标识符和消息参数)供未来参考,然后调用WindowProc( )。
3.WindowProc()发送消息给OnWndMsg( ),如果消息未被处理,则发送给DefWindowproc( )。
4.OnWndMsg()首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数;对于WM_NOTIFY消息调用OnNotify()消息响应函数。任何被遗漏的消息将是标准消息。OnWndMsg()函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。如果OnWndMsg()函数不能找到这样的处理函数的话,则把消息返回到WindowProc()函数,由它将消息发送给DefWindowProc()函数。
5.OnCommand()查看这是不是一个控件通知(lParam参数不为NULL),如果它是,OnCommand()函数会试图将消息映射到制造通知的控件;如果它不是一个控件通知,或者控件拒绝映射的消息,OnCommand()就会调用OnCmdMsg()函数。
6.OnNotify( )也试图将消息映射到制造通知的控件;如果映射不成功,OnNotify( )就调用相同的OnCmdMsg( )函数。
7.根据接收消息的类,OnCmdMsg()函数将在一个称为命令传递(Command Routing)的过程中潜在的传递命令消息和控件通知。例如:如果拥有该窗口的类是一个框架类,则命令和控件通知消息也被传递到视图和文档类,并为该类寻找一个消息处理函数。
见图:
MFC中创建窗口的顺序
1.PreCreateWindow()是一个重载函数,在窗口被创建前,可以在该重载函数中改变创建参数(可以设置窗口风格等等)。
2.PreSubclassWindow()也是一个重载函数,允许首先子分类一个窗口OnGetMinMaxInfo()为消息响应函数,响应的是WM_GETMINMAXINFO消息,允许设置窗口的最大或者最小尺寸。
3.OnNcCreate()也是一个消息响应函数,响应WM_NCCREATE消息,发送消息以告诉窗口的客户区即将被创建。
4.OnNcCalcSize()也是消息响应函数,响应WM_NCCALCSIZE消息,作用是允许改变窗口客户区大小。
5.OnCreate()也是消息响应函数,响应WM_CREATE消息,发送消息告诉一个窗口已经被创建。
6.OnSize()也是消息响应函数,响应WM_SIZE消息,发送该消息以告诉该窗口大小已经发生变化。
7.OnMove()也是消息响应函数,响应WM_MOVE消息,发送此消息说明窗口在移动。
8.OnChildNotify()为重载函数,作为部分消息映射被调用,告诉父窗口即将被告知一个窗口刚刚被创建。
MFC中打开模态对话框的顺序
1.DoModal()是重载函数,重载DoModal()成员函数。
2.PreSubclassWindow()也是重载函数,允许首先子分类一个窗口。
3.OnCreate()是消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建。
4.OnSize()也是消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化。
5.OnMove()也是消息响应函数,响应WM_MOVE消息,发送此消息以告诉窗口正在移动。
6.OnSetFont()也是消息响应函数,响应WM_SETFONT消息,发送此消息以允许改变对话框中控件的字体。
7.OnInitDialog()也是消息响应函数,响应WM_INITDIALOG消息,发送此消息以允许初始化对话框中的控件,或者是创建新控件。
8.OnShowWindow()也是消息响应函数,响应WM_SHOWWINDOW消息,该函数被ShowWindow()函数调用。
9.OnCtlColor()也是消息响应函数,响应WM_CTLCOLOR消息,被父窗口发送已改变对话框或对话框上面控件的颜色。
10.OnChildNotify()是重载函数,作为WM_CTLCOLOR消息的结果发送。
MFC中关闭模态对话框的顺序
1.OnClose()是消息响应函数,响应WM_CLOSE消息,当"关闭"按钮被单击的时候,该函数被调用。
2.OnKillFocus()也是消息响应函数,响应WM_KILLFOCUS消息,当一个窗口即将失去键盘输入焦点以前被发送。
3.OnDestroy()也是消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发送。
4.OnNcDestroy()也是消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被发送。
5.PostNcDestroy()也是重载函数,作为处理OnNcDestroy()函数的最后动作被CWnd调用。
MFC中打开非模态对话框的顺序
1.PreSubclassWindow()是重载函数,允许用户首先子分类一个窗口。
2.OnCreate()是消息响应函数,响应WM_CREATE消息,发送此消息以告诉一个窗口已经被创建。
3.OnSize()也是消息响应函数,响应WM_SIZE消息,发送此消息以告诉窗口大小发生变化。
4.OnMove()也是消息响应函数,响应WM_MOVE消息,发送此消息以告诉窗口正在移动。
5.OnSetFont()也是消息响应函数,响应WM_SETFONT消息,发送此消息以允许改变对话框中控件的字体。
MFC中关闭非模态对话框的顺序
1.OnClose()是消息响应函数,响应窗口的WM_CLOSE消息,当关闭按钮被单击的时候发送此消息。
2.OnDestroy()也是消息响应函数,响应窗口的WM_DESTROY消息,当一个窗口将被销毁时发送此消息。
3.OnNcDestroy()也是消息响应函数,响应窗口的WM_NCDESTROY消息,当一个窗口被销毁后发送此消息。
4.PostNcDestroy()是重载函数,作为处理OnNcDestroy()函数的最后动作,被CWnd调用。
分享到:
相关推荐
包括了MFC应用程序中处理消息的顺序,MFC应用程序创建窗口的过程,MFC应用程序关闭窗口的顺序(非模态窗口) ,MFC应用程序中打开模式对话框的函数调用顺序 ,MFC应用程序中关闭模式对话框的顺序 ,打开无模式对话框的...
全面解析MFC应用程序中处理消息的顺序,对不同的消息之间的顺序进行排序
MFC对话框中对键盘消息的处理
1.PreCreateWindow() 该函数是一个重载函数,在窗口被创建前,可以在该重载函数中改变创建参数(可以设置窗口风格等等) 2.PreSubclassWindow() 这也是一个重载函数,允许首先子分类一个窗口 3.OnGetMinMaxInfo() 该...
MFC消息处理顺序,.mht格式,仅供参考
MFC消息响应顺序,从本质讲解消息的发收,响应
深入解析MFC消息机制,包括消息处理等详细内容!
mfc动态替换消息处理函数源码 MFC中动态替换消息响应函数 编译可运行,含exe
MFC线程自定义消息循环
MFC的消息机制的实现原理和消息处理的过程 对于MFC初学者可以很好了解其内部的运行机制 很好的资源
MFC的消息处理函数 解释了各个MFC消息的应用 解释详尽
MFC运行机制 执行顺序 各个函数用途以及调用顺序
VC MFC 多窗口消息共享同一个消息处理函数。
类似MFC对win32 api的封装,但是功能较弱,仅对消息处理进行了封装。原理上用c++作了简单封装,用mingw单窗口单消息过程,该程序通过,其余的未测试
MFC消息处理MFC消息处理MFC消息处理MFC消息处理MFC消息处理
详细介绍MFC 中的消息传递机制
基于MFC的图像处理
此文档简要介绍了MFC中的消息循环和窗口过程函数,说明其内部传递的原理,有利于了解MFC的内部机制。
讲述MFC中如何添加自定义消息,讲述MFC消息的机制和原理,有代码实例,是了解MFC消息机制的好方式~