1.Command Routing(命令传递):当消息进来时,会有一个泵推动它前进.消息如何进来,以有泵函数如何推动,都是属于windows程序设计的范畴,
消息如果是从子类流向父类(纵向流动),那么事情再简单不过,整个message map消息映射表已规划出十分明确的路线.消息应该有横向流动的机会,MFC对于消息循环的规定是:
如果是一般的windows消息(WM_XXX),则一定是由派生类流向基类,没有旁流的可能.
如果是命令消息(WM_COMMAND),那就有奇特的路线了.
 
2.消息映射--窗口消息 
DefWindowProc-->AfxWndProc-->AfxCallWndProc-->pWnd->WindowProc
 
当消息到达pWnd->WindowProc()时即是调用 CWnd::WindowProc()接着调用 OnWndMsg(message, wParam, lParam, &LResult);
在OnWndMsg()函数里,分别判断当前消息是什么消息,分别是WM_COMMAND或者WM_NOTIFY及标准windows消息
如果是WM_COMMAND消息,又分为命令消息和来自窗口的控件通知消息,如果是命令消息直接调用OnCmdMsg(),此函数为虚函数,首先调用对话框本身的OnCmdMsg,在对话框本身的OnCmdMsg方法中会依次引起基类CDialog,CWnd和CCmdTarget的OnCmdMsg方法的调用,其中CCmdTarget的OnCmdMsg方法中主要搜索消息映射表,如果找到对应的处理函数,则调用_AfxDispatchCmdMsg方法执行消息映射表中的消息处理函数....如果是控件通知消息,则是判断传递进来的hWndCtrl!=NULL,成立则是控件通知消息,优先调用函数ReflectLastMsg(hWndCtrl)将这个消息反射给控件本身.
 
不管是WM_NOTIFY消息还是来自WM_COMMAND的来自控件的通知消息都会优先调用ReflectLastMsg(hWndCtrl)
 
再来看消息反射:在命令消息处理的WM_COMMAND和通知消息处理的WM_NOTIFY方法中优先调用ReflectLastMsg(),调用顺序为:pWnd->SendChildNotifyMsg(pResult)->return OnChildNotify->...._>return ReflectChildNotify()  此函数真正实现了消息反射,发送反射消息WM_COMMAND+WM_REFLECT_BASE或者WM_NOTIFY+WM_REFLECT_BASE最终此消息组全会被发送到OnCmdMsg,正如下面所说,这是一个虚函数,首先调用对话框本身的OnCmdMsg,在对话框本身的OnCmdMsg方法中依次调用引起基类的CDialog,CWnd和CCmdTarget类的OnCmdMsg方法(搜索消息映射表,直接调用消息映射函数);

 added by xiejl

MFC消息路由的更多相关文章

  1. Meandering Through the Maze of MFC Message and Command Routing MFC消息路由机制分析

    Meandering Through the Maze of MFC Message and Command Routing Paul DiLascia Paul DiLascia is a free ...

  2. Visual C++中MFC消息的分类

    Visual C++中MFC消息的分为三类:标准(窗口)消息.命令消息.控件消息. 1.标准(窗口)消息:窗口消息一般与窗口内部运作有关,如创建窗口,绘制窗口,销毁窗口,通常,消息是从系统发到窗口,或 ...

  3. MFC消息映射机制以及画线功能实现

    ---此仅供用于学习交流,切勿用于商业用途,转载请注明http://www.cnblogs.com/mxbs/p/6213404.html. 利用VS2010创建一个单文档标准MFC工程,工程名为Dr ...

  4. 自制MFC消息响应定位器+原理分析

    mfc里面有张消息映射表(MESSAGE_MAP),消息都是通过这张表来分发到相应函数里的. 这个是我自制的定位器,从vc6.0到现在的2013生成的mfc都可以用,全静态扫描并已处理动态基址. 下面 ...

  5. BizTalk动手实验(八)消息路由

    1 课程简介 通过本课程熟悉BizTalk消息由的机制 2 准备工作 1. 熟悉XML.XML Schema.XSLT等相关XML开发技术 2. 新建BizTalk空项目 3 演示 3.1 动态消息路 ...

  6. MFC编程入门之五(MFC消息映射机制概述)

    在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作.比较典型的过程是,用户操作窗口,然后有消息产生,送给窗口的消息处理函数处理,对用户的操作做出响应. 一.什 ...

  7. VS2010/MFC编程入门之五(MFC消息映射机制概述)

    VS2010/MFC编程入门之五(MFC消息映射机制概述)-软件开发-鸡啄米 http://www.jizhuomi.com/software/147.html 上一讲鸡啄米为大家简单分析了MFC应用 ...

  8. MFC消息响应机制 q

    MFC消息响应机制分析 1 引言微软公司提供的MFC基本类库(Microsoft Foundation Classes),是进行可视化编程时使用最为流行的一个类 库.MFC封装了大部分Windows ...

  9. MFC消息映射机制

    1.MFC应用框架主要类之间的关系 MFC自动生成的框架中重要的类有:C-App.CMainFrame.C-Doc和C-View. 其他的类如CClassView.CFileView等都是在框架窗口( ...

随机推荐

  1. iostat (转https://www.cnblogs.com/ftl1012/p/iostat.html)

    iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视.它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况.iostat也有一个弱 ...

  2. Vmware中安装的Ubuntu不能全屏问题解决

    现在有了开源的vmtoll可以下载:open-vm-tools   先安装open-vm-tools:sudo  apt-get install open-vm-tools   然后安装:(不知道具体 ...

  3. vue-cli webpack打包后加载资源的路径问题

    vue项目,访问打包后的项目,输入路径后,页面加载空白.这时会有两类问题,都是路径问题. 1.一个是css,js,ico等文件加载不到,是目录里少了dist 打开页面时一片空白 解决办法: confi ...

  4. S12. Android 检查更新功能实现

    [概述] 不需要从 App Store 或者指定官网直接下载,可以通过 App 直接更新到最新版本. [流程设计] 显示当前版本信息以及版本更新日志 提供 “检查更新” 按钮,点击事件处理逻辑: 1) ...

  5. oracle中row_number()的用法

    公司系统升级的时候需要数据迁移,遇到一个问题:新表的数据结构和旧表异构,旧表是流水号,新表是联合主键(业务号码+业务号码序号) 最后发现用窗口函数 row_number() + partition b ...

  6. HTTP最常见的请求头

    HTTP最常见的请求头如下: l         Accept:浏览器可接受的MIME类型: l         Accept-Charset:浏览器可接受的字符集: l         Accept ...

  7. python学习-14 基本数据类型3

    1.字符串 获取字符串的字符,例如: test = 'abcd' a= test[0] # 通过索引,下标,获取字符串中的某一个字符 print(a) b = test[0:1] # 通过下标的 范围 ...

  8. docker&git&gitlab-安装/部署/新建

    --安装gcc yum -y install gcc --安装g++ yum -y install gcc-c++ --安装编译所需的包 yum -y install curl-devel expat ...

  9. AttnGAN: Fine-Grained Text to Image Generation with Attentional Generative Adversarial Networks 笔记

    AttnGAN: Fine-Grained Text to Image Generation with Attentional Generative Adversarial Networks 笔记 这 ...

  10. (一)shiro简介和用户登录demo及角色管理

    一.shiro简介 Apache Shiro是Java的一个安全框架.Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境.Shiro可以帮助我们完成 ...