消息映射机制

   跟框架机制一样 也是寻寻觅觅了很久。。到最后知道的真想骂一句:低俗。。

 

 

现在说机制吧。。有个虚函数GetMessageMap在

 

CWnd和CCmdTarget都有定义(利用DECLARE_MESSAGE_MAP())。

和一个非虚函数GetThisMessageMap。

 

大家都还记得BEGIN_MESSAGE_MAP(theClass, baseClass)这个宏吧。。

 

example:我定义了一个类CXXOO继承CWnd。打算重写OnCreate(处理wm_create消息),那么就需要在类声明处放置DECLARE_MESSAGE_MAP(),定义处放置BEGIN_MESSAGE_MAP(CXXOO, CWnd)和END_MESSAGE_MAP(),把ON_WM_CREATE()

放置在2个宏中间 以上都是废话~~

example2:未重写~~

好,现在要处理了wm_create了。如example调用GetMessageMap时会调用CXXOO重写的那个,然后在theClass:: GetThisMessageMap的一个静态数组_messageEntries中找到了wm_create,继而调用你重写的OnCreate。如example2调用GetMessageMap依然调用CXXOO重写的,但确找不到,那就去找baseClass:: GetThisMessageMap中的那个静态数组,按继承图从下往上。(CCmdTarget应该没怎么定义,大部分的映射项应该都放在CWnd里。)

 

但微软在MFC里面加了个缓存机制,这是我们用win32API编写Windows程序时不会写的。。有机会再看那个怎么实现的吧就这样了。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值