第6章菜单、工具栏和状态栏 UPDATE COMMAND UI消息编写消息处理函数来处理菜单的更新。 下面就为例子中添加的菜单项实现菜单更新处理。当执行“圆形”菜单命令画圆后,再展开“绘图 下拉菜单时,“圆形”菜单项前添加一选中标志,而当执行了“矩形”菜单命令后,展开“绘图”下拉 菜单时,“矩形”菜单项前添加一选中标志,而“圆形”菜单项前的选中标志消失。实现过程如下 1.用 MFC ClassWizard自动映射菜单更新消息和成员函数 执行“view”→“ Class wizard”菜单命令项,或者使用【curl+W】快捷键,打开“ MFC Class Wizard 对话框。在对话框的“ Message Map”选项卡中的 Class name列表框中选择要响应菜单命令的类 “CCh6 Demol view”",在“ Object IDs”列表框中选择菜单ID“ID_ DRAWCIRCLE”,在“ Messages”列表 框中选择“ UPDATE COMMAND UI”菜单命令消息。然后单击“ Add function”按钮,弹出 “ AddMember Function”对话框,采用默认的函数名,如图5.10所示。单击“OK”按钮,关闭此对话框 Message Maps Member Variables I Automation I ActiveX Events|Class Info D: 1Ch6DemoltCh6Demolview.h, D: 1Ch6DemoltChbDemolviewcpp MMAND UI Edit Code Memher function name Object ID: ID DRAY Description: Callback for menu and button enabling/graying 图5.10“ MFC Class wizard”对话框 2.手工添加函数的实现代码 (1)在CCh6 Demo l view类的头文件中,声明指示变量m_ nDdrawtype,指明当前绘制的图形(值 为1,表示为圆:值为2,表示为矩形)。代码如下 class cch6Demolview public cview public int m nDdrawtype (2)在CCh6 Demol view类的构造函数中,将变量 m nDdrawtype初始化为0。代码如下 cch6Demolview:: cch 6Demolview() / TODO: add construction code here m nDdrawtype=0 励志照亮人生编程改变命
UPDATE_COMMAND_UI消息编写消息处理函数来处理菜单的更新。 下面就为例子中添加的菜单项实现菜单更新处理。当执行“圆形”菜单命令画圆后,再展开“绘图” 下拉菜单时,“圆形”菜单项前添加一选中标志,而当执行了“矩形”菜单命令后,展开“绘图”下拉 菜单时,“矩形”菜单项前添加一选中标志,而“圆形”菜单项前的选中标志消失。实现过程如下。 1. 用MFC ClassWizard自动映射菜单更新消息和成员函数 执行“View”→“ClassWizard”菜单命令项,或者使用【Ctrl+W】快捷键,打开“MFC ClassWizard” 对话框。在对话框的“Message Map”选项卡中的Class Name列表框中选择要响应菜单命令的类 “CCh6Demo1View”,在“Object IDs”列表框中选择菜单ID“ID_DRAWCIRCLE”,在“Messages”列表 框中选择“UPDATE_COMMAND_UI”菜单命令消息。然后单击“Add Function”按钮,弹出 “AddMember Function”对话框,采用默认的函数名,如图5.10所示。单击“OK”按钮,关闭此对话框。 图5.10 “MFC ClassWizard”对话框 2. 手工添加函数的实现代码 (1)在CCh6Demo1View类的头文件中,声明指示变量m_nDdrawtype,指明当前绘制的图形(值 为1,表示为圆;值为2,表示为矩形)。代码如下: class CCh6Demo1View : public CView { …… public: int m_nDdrawtype; …… (2)在CCh6Demo1View类的构造函数中,将变量m_nDdrawtype初始化为0。代码如下: CCh6Demo1View::CCh6Demo1View() { // TODO: add construction code here m_nDdrawtype=0; } 93 励志照亮人生 编程改变命运 第 6 章 菜单、工具栏和状态栏编程
Visual c++ (3)在菜单项命令响应函数中,分别将变量 m_nDdrawtype设置为相应的值。代码如下 void cch 6Demolview::: OnDrawcircle( / TODO: Add your command handler code here CDC*pDC=GetDC ( //使用 GetA()函数申请cDc类的指针 void cch6Demolview:: OnDrawrect ( Ddrawtype=2 //表示绘制矩形 CDC*pDC=GetDC()i //使用 GetA()函数申请cDC类的指针 (4)在菜单项更新命令响应函数中,实现菜单项的更新。代码如下 void cch6Demolview:: OnUpdateDrawcircle(CCmdUI* pcmdUI / TODO: Add your command update uI handler code here pCmdUI->Setcheck(m nDdrawtype==l //若为圆形,设置选中标记 void Cch6Demolview:: OnUpdateDrawrect(CCmdUI* pCmdUI / TODO: Add your command update UI handler code here pCmdUI->Setcheck(m nDdrawtype==2) //若为矩形,设置选中标记 其中, CCdu类是MFC专门为更新命令提供的一无标=6m 个类,对于菜单项而言,其相关的函数及其作用如下:样编查看着精图R D日的母 Enable:设置菜单项的允许/禁止状态。 SetCheck():设置是否在菜单项前面打勾(√)。 SetRadioo:设置是否在菜单项前面画点(·)。 GetText):设置菜单项显示的的文字 绘制边长为100正方形 此时编译运行程序,就实现了菜单的更新操作, 结果如图5.11所示 5.1.6为菜单项设置快捷键 图5.11程序运行结果 快捷键的主要作用就是在选择菜单命令时,不用 鼠标而用事先定义的组合键。如在Word软件中,用户可以使用【Ctrl+C】组合键复制文本,而使用 【Ctrl+V】组合键粘贴文本。这样做的好处就是熟练操作应用程序的用户可以不用鼠标,而用键盘直 接同应用程序实现交互。下面就对程序“Ch6 Demol”新创建的菜单项“圆形”和“矩形”分别添加 快捷键【Ctrl+Y】【ctrl+J】。 1.为菜单项添加快捷键提示 在菜单资源编辑器中,双击“圆形”菜单项,打开菜单项属性对话框。在“ Caption”编辑框中 励志照亮人生编程改变命运
(3)在菜单项命令响应函数中,分别将变量m_nDdrawtype设置为相应的值。代码如下: void CCh6Demo1View::OnDrawcircle() { // TODO: Add your command handler code here m_nDdrawtype=1; //表示绘制圆 CDC*pDC=GetDC(); //使用GetDC()函数申请CDC类的指针 …… } void CCh6Demo1View::OnDrawrect() { // TODO: Add your command handler code here m_nDdrawtype=2; //表示绘制矩形 CDC*pDC=GetDC(); //使用GetDC()函数申请CDC类的指针 …… } (4)在菜单项更新命令响应函数中,实现菜单项的更新。代码如下: void CCh6Demo1View::OnUpdateDrawcircle(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(m_nDdrawtype==1); //若为圆形,设置选中标记 } void CCh6Demo1View::OnUpdateDrawrect(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(m_nDdrawtype==2); //若为矩形,设置选中标记 } 其中,CCmdUI类是MFC专门为更新命令提供的一 个类,对于菜单项而言,其相关的函数及其作用如下: • Enable():设置菜单项的允许/禁止状态。 • SetCheck():设置是否在菜单项前面打勾(√)。 • SetRadio():设置是否在菜单项前面画点(·)。 • SetText():设置菜单项显示的的文字。 此时编译运行程序,就实现了菜单的更新操作, 结果如图5.11所示。 5.1.6 为菜单项设置快捷键 快捷键的主要作用就是在选择菜单命令时,不用 鼠标而用事先定义的组合键。如在Word软件中,用户可以使用【Ctrl+C】组合键复制文本,而使用 【Ctrl+V】组合键粘贴文本。这样做的好处就是熟练操作应用程序的用户可以不用鼠标,而用键盘直 接同应用程序实现交互。下面就对程序“Ch6Demo1”新创建的菜单项“圆形”和“矩形”分别添加 快捷键【Ctrl+Y】、【Ctrl+J】。 1. 为菜单项添加快捷键提示 在菜单资源编辑器中,双击“圆形”菜单项,打开菜单项属性对话框。在“Caption”编辑框中, 94 励志照亮人生 编程改变命运 零基础学 Visual C++ 图5.11 程序运行结果