注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

重读深入浅出MFC(6)-消息的种类及处理方式3  

2011-07-27 15:47:20|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

消息的基本处理流程,李久进的MFC消息映射的回顾
从处理命令消息的过程可以看出,Windows 消息和控制消息的处理要比命令消息的处理简单,因为查找消息处理函数时,后者只要搜索当前窗口对象(this 所指)的类或其基类的消息映射入口表。但是,命令消息就要复杂多了,它沿一定的顺序链查找链上的各个命令目标,每一个被查找的命令目标都要搜索它的类或基类的消息映射入口表。
MFC 通过消息映射的手段,以一种类似C++虚拟函数的概念向程序员提供了一种处理消息的方式。但是,若使用C++虚拟函数实现众多的消息,将导致虚拟函数表极其庞大;而使用消息映射,则仅仅感兴趣的消息才加入映射表,这样就要节省资源、提高效率。这套消
息映射机制的基础包括以下几个方面:
第一、消息映射入口表的实现:采用了C++静态成员和虚拟函数的方法来表示和得到一个消息映射类(CCmdTarget 或派生类)的映射表。
第二、消息查找的实现:从低层到高层搜索消息映射入口表,直至根类 CCmdTarget。
第三、消息发送的实现:主要以几个虚拟函数为基础来实现标准 MFC 消息发送路径:
OnComamnd、OnNotify、OnWndMsg 和OnCmdMsg。、
OnWndMsg 是CWnd 类或其派生类的成员函数,由窗口过程调用。它处理标准的
Windows 消息。OnCommand 是CWnd 类或其派生类的成员函数, 由OnWndMsg 调用来处理WM_COMMAND 消息,实现命令消息或者控制通知消息的发送。如果派生类覆盖该函数,则必须调用基类的实现,否则将不能自动的处理命令消息映射,而且必须使用该函数接受的
参数(不是程序员给定值)调用基类的OnCommand。
OnNotify 是CWnd 类或其派生类的成员函数,由OnWndMsg 调用来处理WM_NOTIFY消息,实现控制通知消息的发送。
OnCmdMsg 是CCmdTarget 类或其派生类的成员函数。被OnCommand 调用,用来实现命令消息发送和派发命令消息到命令消息处理函数。
自动更新用户对象状态是通过 MFC 的命令消息发送机制实现的。控制消息可以反射给控制窗口处理。
队列消息在发送给窗口过程之前可以进行消息预处理,如果消息被MFC 窗口对象预处理了,则不会进入消息发送过程。


 

  评论这张
 
阅读(618)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017