第6节  命令传递机制

更新于 2026年10月10日 版权声明
第6节 命令传递机制

在一些MFC派生类中重写OnCmdMsg虚函数,可以对WM_COMMAND消息的发送路径进行管理。例如,在主框架类中收到命令消息后,调用活动视图子窗口的OnCmdMsg函数,让活动视图子窗口得到优先处理。如果视图子窗口不处理,则再调用与它关联的文档以及theApp等类对象处理。

创建一个工程名为“cm”不使用文档视图架构的SDI程序,用于了解命令传递机制。

1)在向导第1步,选择多文档和非文档视图框架,如图13-27所示。

图示

图13-27 创建框架视图程序

2)添加CTreeView派生类作为分隔栏左侧的视图类,如图13-28所示。

3)添加CListView派生类作为分隔栏右侧的视图类,如图13-29所示。

图示

图13-28 创建CTreeView类的派生类

图示

图13-29 创建CListView类的派生类

4)在stdafx.h预定义头文件中,添加视图类的头文件,如图13-30所示。

图示

图13-30 修改预编译头文件

5)在主框架类的头文件中,添加两个视图类的指针变量并删除ChildView的代码。

图示

图示

6)在主框架类的OnCreate函数中删除ChildView的代码。

图示

7)在OnFocus和OnCmdMsg两个函数中,也删除ChildView的代码。

图示

8)在主框架类中添加OnCreateClient虚函数,如图13-31所示。

图示

图13-31 添加虚函数

9)修改OnCreateClient函数代码,创建一行两列的分隔窗口。(https://www.daowen.com)

图示

10)在资源视图中,修改IDR_MAINFRAME主菜单,如图13-32所示。

图示

图13-32 编辑主菜单资源

11)在“编辑”菜单下面添加一些子菜单项,见表13-3。

表13-3 编辑菜单项属性

图示

12)通过类向导在CLeftView视图类中,建立“添加部门”菜单项的消息映射函数,如图13-33所示。

图示

图13-33 添加菜单项的消息映射函数

13)通过类向导在CRightView视图类中,建立“添加员工”菜单项的消息映射函数,如图13-34所示。

图示

图13-34 添加菜单项的消息映射函数

14)编译并运行,测试代码,如图13-35所示。

两个新增的菜单项并不可用,说明菜单消息并没有被转发到主框架的两个子窗口内。

图示

图13-35 查看运行结果

15)重写主框架类的OnCmdMsg虚函数。

图示

16)编译并运行,测试代码,如图13-36所示。

图示

图13-36 查看运行结果

通过重写OnCmdMsg函数,将主框架内接收的命令消息准确地分发给两个视图子窗口。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)