得到如图 3…15 所示的运行结果。
图 3…15 菜单应用程序的运行结果
2 .添加动态修改菜单状态的处理函数
每一个菜单项都有很多属性,通过动态改变菜单项的属性可以及时反映菜单的状态,为
用户提供相关的信息。但在介绍菜单资源编辑器的时候也涉及到了一些跟菜单属性有关的内
容。在资源编辑器中只能设置菜单的初始状态,并不能在程序运行时动态地改变菜单属性,
这就需要通过程序代码来实现这些功能。
·53 ·
…………………………………………………………Page 63……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
在前一部分中使用 ClassWizard 对话框添加消息处理函数时可以看到如图 3…14 所示的菜
单 ID 对应的“Messages ”列表框中有两项,一项是已经用到的“MAND ”,另一项
UPDATE_MAND_UI ”则是本部分将要介绍的菜单项的状态更新消息。该消息在 MFC
“
要更新整个程序界面时产生,提示用户设置该菜单项当前的状态。
下面为前一节的示例添加“仙履奇缘”菜单项的状态更新处理,要求必须在选择过“月
光宝盒”菜单项后才能选择“仙履奇缘 ”,否则“仙履奇缘”菜单项处于禁用状态。
(1)为主框架类添加一个成员变量,用以标记“月光宝盒”菜单项是否被选择过。要添
加成员变量,首先应在 IDE 左侧单击“ClassView ”选项卡,展开“Classes ”节点,在 CMainFrame
节点上单击鼠标右键,在弹出菜单中选择“Add Member Variable ”菜单项,打开“Add Member
Variable ”对话框,如图 3…16 所示。在其中的“Variable Type ”变量类型文本框中输入“BOOL ”,
在“Variable Name ”变量名文本框中输入“m_bHaveSeenMovie1 ”,并选中“Access ”区域中
的“Public ”单选框。确认后即为 CMainFrame 添加了一个公共成员变量 m_bHaveSeenMovie1 。
该变量的值将决定是否禁用“仙履奇缘”菜单项,当它的值为 TRUE 时,菜单项允许,为 FALSE
时则被禁用。
图 3…16 为 CMainFrame 添加的成员变量
(2 )初始化新创建的成员变量,初始值为 FALSE ,即“仙履奇缘”菜单项默认是被禁用
的 。 在 IDE 工 作 区 的 ClassView 选 项 卡 下 , 展 开 CMainFrame , 双 击 类 的 构 造 函 数
CMainFrame(),客户区自动打开 MainFrame。cpp 文件并定位在 CMainFrame::CMainFrame()函
数上。在该函数中添加如下代码:
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
m_bHaveSeenMovie1 = FALSE;
}
(3 )在 CMainFrame 中添加“仙履奇缘”菜单项的更新用户接口对象状态命令消息处理
函数。
在 IDE 主菜单中依次选择“View|ClassWizard ”菜单命令或者在开发界面中直接使用快
捷键 Ctrl+W 打开“ClassWizard ”对话框,单击“Message Maps ”选项卡,在“Class name ”
下拉列表框中选择 CMainFrame,在“Object IDs ”列表框中选择 ID_MOVIE2 “仙履奇缘”
项,双击“Messages ”列表框中的 UPDATE_MAND_UI 或者在其上单击鼠标左键,然
后单击“Add Function ”按钮,为 ID_MOVIE2 添加更新用户接口对象状态命令消息处理函数。
在 弹 出 的 如 图 3…2 所 示 的 对 话 框 中 直 接 单 击 “ OK ” 按 钮 ( 对 话 框 中 函 数 名 为 默 认
·54 ·
…………………………………………………………Page 64……………………………………………………………
第 3 章 菜单与加速键
OnUpdateMovie2 ),返回“ClassWizard ”对话框。可以看见在“Member functions ”列表中添
加了一个名为 OnUpdateMovie2 的新函数。单击“Edit Code ”按钮,则退出“ClassWizard ”
对话框,并打开 MainFrm。cpp 文件,在刚添加的 CMainFrame::OnUpdateMovie2() 中添加如下
代码:
void CMainFrame::OnUpdateMovie2(CCmdUI* pCmdUI)
{
// TODO: Add your mand update UI handler code here
pCmdUI…》Enable(m_bHaveSeenMovie1);
}
(4 )接着根据是否选择过“月光宝盒”菜单项设置“仙履奇缘”是否禁用。当选择“月
光宝盒”菜单项后,使其消息处理函数将 m_bHaveSeenMovie1 设置为 TRUE 就可以激活“仙
履奇缘”菜单项。在工作区 ClassView 选项卡中展开 CMainFrame,双击 OnMovie1()节点,IDE
自动打开MainFrm。cpp 并定位 OnMovie1()函数。修改该函数代码如下:
void CMainFrame::OnMovie1()
{
// TODO: Add your mand handler code here
MessageBox(〃悟空你也太调皮了,我跟你说过叫你不要乱扔东西,你怎么又…〃;
〃月光宝盒〃);
m_bHaveSeenMovie1=TRUE;
}
(5 )编译并运行该程序,就可以实现既定功能。
在 CMainFrame::OnUpdateMovie2()函数中,参数 pCmdUI 指向当前要更新的菜单项的对
象,这里即为“仙履奇缘”菜单项。通过 pCmdUI 的成员方法就可以改变菜单项的属性。下
面分别介绍 CCmdUI 中改变菜单属性主要的成员方法:
o Enable()
Enable() 函数用于设置菜单项是否有效。其原型为:
virtual void Enable(BOOL bOn = TRUE);
bOn 为 TRUE 时菜单项有效,反之菜单项无效,显示为灰色,不响应鼠标单击或者其他
有同样效果的操作。bOn 的默认值是 TRUE 。下面的代码根据标志 m_bMenuItemEnable 变量
设置某个菜单项是否有效:
void CMainFrame::OnUpdateMenuitem (CCmdUI* pCmdUI)
{
pCmdUI…》Enalbem_bMenuItemEnable);
}
无效的子菜单如图 3…17 所示。
图 3…17 无效的菜单项 Menu
·55 ·
…………………………………………………………Page 65……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
o SetCheck()
SetCheck()函数用于设置菜单项的复选状态。其原型为:
virtual void SetCheck(int nCheck = 1 );
nCheck 等于 0 时菜单项没有被选中,nCheck 等于 1 时菜单项被选中,在菜单项标题前
有一个小勾。nCheck 的默认值为 1。下面的代码根据标志 m_bMenuItemChecked 变量是否为
真设置某个菜单项是否被复选选中。
void CMainFrame::OnUpdateMenuitem (CCmdUI* pCmdUI)
{
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 其他
- 最新章:第4章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 其他
- 最新章:第37章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 其他
- 最新章:第31章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 其他
- 最新章:第214章
- C语言设计
- 作者:谭浩强1 C 语言概述1.1 C语言的发展过程1.2 当代最优秀的程序设计语言1.3 C语言版本1.4 C语言的特点1.5 面向对象的程序设计语言1.6 C和C+1.7 简单的C程序介绍1.8 输入和输出函数1.9 C源程序的结构特点1.10书写程序时应遵循的规则1.11C语言的字符集1.12
- 文学名著
- 最新章:第45章
- 设计成婚:不入豪门
- 作者:海未央《设计成婚2:名门新娘》作品介绍《名门新娘》介绍:她是骆家收养的孤女,性格因为受他的影响,变得有些古灵精怪,也懂得是非之分!他说他的一切只为他而努力,可是为什么要拒绝自己呢?什么?没有满十八岁?那今天生日,够十八岁了吧?什么,还太小?太过分了,这不是耍着自己玩吗?嘿嘿,有个邪恶的老师,那
- 魔法玄幻
- 最新章:第196章
- 玄学,从入门到放弃
- 《玄学,从入门到放弃》作者:李传言文案:周诣一手拿着卜卦,一手拿着《演员的自我修养,叹息良久。他本是百年前观天占星的玄术师,谁知却一朝重生现代。他只想平淡地生活下去,可天不遂人愿,他注定将在这末法时代掀起波澜!成就一代影帝!谢千仇沉默地看着他…大师,你卦和书都拿倒了#玄学,从入门到放弃,入土,删库跑
- 魔法玄幻
- 最新章:第86章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 其他
- 最新章:第143章
- 要你言听计从
- 作者:决明第一章哈士奇,没有护卫看家的本领,对主人、客人甚至是闯空门的恶人都一样友善,咬着皮球跟小偷一块玩你丢我捡也不用太惊讶,时常被人认为忠诚度不足。贺世祺背靠在冰冷玻璃落地窗前,一整间屋子都是伸手不见五指的黑暗,也好,反正他现在什么也不需要看到,只要耳朵还有听觉就好,顺便听听贴在耳边的手机里还要
- 都市言情
- 最新章:第28章