zoukankan      html  css  js  c++  java
  • 消息映射与消息路由原理

    映射:通过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

  • 相关阅读:
    alpha版本冲刺总结
    近两天项目冲刺
    关于微软必应词典客户端 的案例分析
    第三次作业——结队编程
    hdu 1002 A + B Problem II(大数)
    ZOJ 3805 Machine(二叉树,递归)
    hdu 4704 sum(费马小定理+快速幂)
    欧拉图
    hdu 1116 Play on Words(欧拉通路)
    前50个斐波那契数
  • 原文地址:https://www.cnblogs.com/xuxu8511/p/2732898.html
Copyright © 2011-2022 走看看