消息映射与消息路由原理

映射:通过declare_map宏  begin_message_map 与end_message_map完成

路由:通过CcmdMsg 完成。

控件通知消息(WM_****)与命令消息(WM_COMMAND消息)的路由过程不一致,如Win32程序存在windowProc函数,然后其内部实现中存在控件通知消息和命令消息的判断(如下),控件通知消息不会进入OnCommand函数(OnCommand函数实现中存在CcmdMsg函数),也就不会进出CcmdMsg函数,相反,WM_COMMAND消息会进入CcmdMsg函数,从而完成诡异的消息路由过程。

 1 void  WindowProc(){
 2    if(nMsg == WM_COMMAND){
 3            OnCommand();
 4       return DefWindowProc();
 5    }
 6 
 7 }
 8 
 9 
10 /// 因为windowProc是虚函数,当指定类没有调用时,会调用父类的windowProc,这样完成消息往父类推去的原理。

 

控件消息(直接把消息往父类推去):CView  --> CWnd  -->CCmdTarget
                               CFrameWnd  -->CWnd  -->  CCmdTarget

命令消息(不一样的消息路由过程):CView -->CWnd --> CCmdTarget
                                     -->CDocument  ---> CCmdTarget
       
 CFrameWnd  --> CView -->CWnd --> CCmdTarget
                   --> CDocument  ---> CCmdTarget
            --> CWnd --> CCmdTarget
                   --> CWinApp-->CCmdTarget

转载于:https://www.cnblogs.com/xuxu8511/archive/2012/10/21/2732898.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值