首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
菜单命令的路由
时间:
2015-01-29 19:14:35
阅读:
163
评论:
0
收藏:
0
[点我收藏+]
标签:
一、Windows消息的分类
①标准消息
除WM_COMMAND之外,所有的以WM_开头的消息都是标准消息,从CWnd类派生的类,都可以接收到这类消息。
②命令消息
来自菜单、加速键、工具栏的消息。这类消息都以WM_COMMAND形式呈现。在MFC中通过菜单项ID区分不同的命 令消息,在SDK中,通过消息的wParam参数识别。从CCmdTarget派生的类,都可以接收这类消息。
③通告消息
由控件产生的消息,目的是为了向其父窗口通知事件的发生。这类消息也以WM_COMMAND形式呈现。从 CCmdTarget派生的类,都可以接收此类消息。
CWnd类派生于CCmdTarget类,所以凡是从CWnd派生的类,既可以接收标准消息,又可以接收命令消息和通告消息。从CCmdTarget派生的类,只能接收命令消息和通告消息。
二、菜单命令的路由
命令消息的路由
MFC在后台把窗口过程函数替换成了AfxWndProc函数,由这个函数对所有的消息进行处理。该函数内部将调用AfxCallWndProc函数。后者又将调用WindowProc函数,这是CWnd类的一个成员函数,应用程序所有类型的消息都会进入到这个函数中。WindowProc函数又将调用OnWndMsg函数,这个函数会对到来的消息进行一个类型判断,如果是标准消息,就利用消息映射机制来查找时哪个类响应了当前这个消息,并调用相应的消息映射函数,完成对消息的处理;如果是命令消息,它就会交由OnCommand函数来处理,在这个函数中将完成命令消息的路由;如果是通告消息,那么它将交由OnNotify这个函数来处理,该函数将完成通告消息的路由。二者最后都会调用OnCmdMsg函数。
菜单命令消息路由的具体过程:当点击某个菜单项时,最先接收到这个菜单命令消息的是框架类。框架类将把接收到的这个消息交给它的子窗口,即视类,由视类首先进行处理。视类首先根据命令消息映射机制查找自身是否对此消息进行了响应,如果响应了,就调用相应响应函数对这个消息进行处理,消息路由过程结束;如果视类没有对此命令消息作出响应,就交由文档类,文档类同样查找自身是否对这个菜单命令进行了响应,如果响应了,就由文档类的命令消息响应函数进行处理,路由过程结束。如果文档类也未作出响应,就把这个命令消息交还给视类,视类又把该消息交还给框架类。框架类查看自己是否对这个命令消息进行了响应,如果它也没有作出响应,就把这个菜单命令消息交给应用程序类,由后者进行处理。
总结: 响应菜单项命令的顺序依次是:视类、文档类、框架类、应用程序类。
菜单命令的路由
标签:
原文地址:http://www.cnblogs.com/nitianbenbendan/p/4260644.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!