[C++ VC MFC] MFC消息响应机制
来源:互联网 发布:js 鼠标离开时隐藏 编辑:程序博客网 时间:2024/06/10 06:05
所有MFC的窗口类都通过钩子函数_AfxCbtFilterHook截获消息,并且在钩子函数_AfxCbtFilterHook中把窗口过程设定为AfxWndProc。原来的窗口过程保存在成员变量m_pfnSuper中。
----所以在MFC框架下,一般一个消息的处理过程是这样的。
- 函数AfxWndProc接收Windows操作系统发送的消息。
- 函数AfxWndProc调用函数AfxCallWndProc进行消息处理,这里一个进步是把对句柄的操作转换成对CWnd对象的操作。
- 函数AfxCallWndProc调用CWnd类的方法WindowProc进行消息处理。注意AfxWndProc和AfxCallWndProc都是AFX的API函数。而WindowProc已经是CWnd的一个方法。所以可以注意到在WindowProc中已经没有关于句柄或者是CWnd的参数了。
- 方法WindowProc首先判断消息是否为WM_COMMAND,如果不是,就把消息往父类送去;如果是则调用方法OnCommand,再由后者调用OnWndMsg进行正式的消息处理,即把消息派送到相关的方法中去处理。消息是如何派送的呢?实际上在CWnd类中都保存了一个AFX_MSGMAP的结构,而在AFX_MSGMAP结构中保存有所有我们用ClassWizard生成的消息的数组的入口,我们把传给OnWndMsg的message和数组中的所有的message进行比较,找到匹配的那一个消息。实际上系统是通过函数AfxFindMessageEntry来实现的。找到了那个message,实际上我们就得到一个AFX_MSGMAP_ENTRY结构,而我们在上面已经提到AFX_MSGMAP_ENTRY保存了和该消息相关的所有信息,其中主要的是消息的动作标识和跟消息相关的执行函数。然后我们就可以根据消息的动作标识调用相关的执行函数,而这个执行函数实际上就是通过ClassWizard在类实现中定义的一个方法。这样就把消息的处理转化到类中的一个方法的实现上。
- 如果OnWndMsg方法没有对消息进行处理的话,就调用DefWindowProc对消息进行处理。这是实际上是调用原来的窗口过程进行缺省的消息处理。
- [C++ VC MFC] MFC消息响应机制
- MFC消息响应机制
- MFC消息响应机制
- MFC消息响应机制
- MFC消息响应机制
- MFC----消息响应机制
- MFC消息响应机制
- MFC消息响应机制
- MFC/VC 消息机制
- MFC消息响应机制分析
- MFC消息响应机制分析
- MFC消息响应机制分析
- MFC消息响应机制分析
- MFC消息响应机制分析
- MFC消息响应机制分析
- MFC消息响应机制说明
- MFC消息响应机制分析
- MFC消息响应机制分析
- [C++ MFC VC] 虚函数表指针的位置
- comboBox控件SelectedIndexChanged时的取值问题
- CSS样式命名规则及参考命名标准
- [C++ VC MFC] VC常用数据类型使用转换
- 修炼一名程序员的职业水准
- [C++ VC MFC] MFC消息响应机制
- 年度工作总结
- 你家的GDP是多少
- 超级无限位乘法计算系统
- MapReduce--Map是一个分的过程,Reduce则对应着合
- 全面深入介绍C语言字符串函数
- 工作年度计划(一)
- 年度工作计划(续)
- 游戏引擎全剖析(1)