按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
·48 ·
…………………………………………………………Page 58……………………………………………………………
第 3 章 菜单与加速键
图 3…6 “大话西游”菜单项
(3 )关闭如图 3…5 所示的对话框,单击资源编辑器中“大话西游”的菜单项,会显示它
的下层菜单,如图 3…6 所示。因为还没有添加任何子菜单项,所以“大话西游”的下层菜单
是空的,显示为一个虚线框。在图 3…6 中单击这个虚线框,弹出类似于图 3…5 的属性编辑对
话框,如图 3…7 所示。
图 3…7 添加“月光宝盒”菜单项
其中,在“ID ”文本框中输入“ID_MOVIE1 ”,“Caption ”文本框中输入“月光宝盒(&Y) ”,
“Prompt ”文本框中输入“打开电影《大话西游之月光宝盒》”。标题中的“&Y ”表示打开“大
话西游”菜单项后,在键盘上按“Y ”键可以直接选择“月光宝盒”菜单项。当鼠标光标移
动到“月光宝盒”这个菜单项上时,会在程序的状态栏中显示“Prompt ”文本框中的内容,
即“打开电影《大话西游之月光宝盒》”。回车关闭属性编辑对话框,保存修改。
(4 )按照步骤(3 )的方法加入菜单项“仙履奇缘”,其属性对话框如图 3…8 所示。
图 3…8 添加“月光宝盒”菜单项
(5 )完成两个子菜单项的添加后,在资源编辑器中得到如图 3…9 所示的效果。
图 3…9 添加完成后的“大话西游”菜单项
3。2。2 加速键的创建
键盘加速键是应用程序中定义的某些组合键,按下组合键可以快捷地选择相应的菜单项
·49 ·
…………………………………………………………Page 59……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
和执行某些相应的操作。加速键可以和菜单项相关联,也可以定义某些菜单上没有提供的命
令。例如 Visual C++ IDE 中复制和粘贴的快捷键分别是 Ctrl+C 和 Ctrl+V,这两个快捷键就是
直接关联到 IDE “编辑”菜单下的“复制”和“粘贴”菜单项。与菜单项的关联只需要将加
速键的 ID 设置为对应菜单项的 ID,比如 Ctrl+C 的 ID 设置为 ID_EDIT_COPY 就可以关联到
ID 同样是 ID_EDIT_COPY 的“编辑”菜单下的“复制”菜单项。
下面以在 3。2。1 节中创建的工程中添加加速键为例介绍添加加速键的方法。
(1)在集成开发环境(IDE )左侧单击“ResourceView ”选项卡,在树状列表中寻找
“
Accelerator ”节点下的“IDR_MAINFRAME ”子节点,单击该节点就会在右侧客户窗口中打
开加速键资源 IDR_MAINFRAME 的加速键列表,如图 3…10 所示。IDR_MAINFRAME 加速
键资源是 AppWizard 在创建应用程序时默认添加的,一般无需另外创建新的加速键资源。
(2 )双击编辑界面右侧客户区最下方的虚线框,打开一个加速键属性编辑对话框,如图
3…11 所示,在该对话框中即可添加新的加速键。
在属性编辑对话框的“ID ”文本框中输入“ID_MOVIE1 ”,对应“大话西游”菜单项下
的“月光宝盒”菜单项的 ID,输入完毕后“ID ”文本框会自动显示“ID_MOVIE1=数字”,
这里数字表示 ID_MOVIE1 的数值,一般由 Visual C++ 自动给出,用户无需更改。
在“Key ”文本框中输入“Y ”,选中“Modifiers ”区域中的“Ctrl ”复选框,取消其他复
选框的的选取,在“Type ”区域中选中“VirtKey ”单选框,表示使用虚拟键(Virtual Key )。
这样就建立起加速键 Ctrl+Y 和“月光宝盒”菜单项的对应 。程序运行后,只需按 Ctrl+Y
键就可以选择“月光宝盒”菜单项,触发相应的命令消息了。
图 3…10 加速键资源编辑界面
·50 ·
…………………………………………………………Page 60……………………………………………………………
第 3 章 菜单与加速键
图 3…11 “月光宝盒”加速键资源编辑界面
(3 )按照步骤(2 )中的方法,加入加速键 Ctrl+L 与“仙履奇缘”菜单项的对应,相应
的属性对话框如图 3…12 所示。
图 3…12 “仙履奇缘”加速键资源编辑界面
(4 )完成加速键的添加后,为了完善用户界面,需要在菜单项标题中添加加速键的说明。
在 IDE 左侧的“ResourceView ”选项卡中,展开“Menu ”节点,双击 IDR_MAINFRAME 进
入 IDR_MAINFRAME 菜单资源编辑界面。然后在 IDE 右侧客户区中单击“大话西游”菜单
项,弹出子菜单,在“月光宝盒”菜单项上双击鼠标左键,弹出属性编辑对话框,将“Caption ”
文本框中的标题修改为“月光宝盒(&Y)tCtrl+Y ”,如图 3…13 所示。其中“t ”表示“Ctrl+Y ”
的显示与前面“月光宝盒(&Y) ”之间隔一个制表位(Tab )。
图 3…13 添加“月光宝盒”的加速键说明
(5 )参照前一步,在“仙履奇缘”菜单标题中加上 Ctrl+L 的加速键说明。
3。3 添加菜单所需处理函数
前一节介绍了创建和添加菜单资源的方法,但添加菜单资源只是创建菜单的第一步。用
户编译执行前一节的例子就会发现,运行时关闭所有文档,程序显示的 IDR_MAINFRAME
菜单中“大话西游”下的两个菜单项都是禁用的。这是因为缺少相应的用户处理函数,主框
·51 ·
…………………………………………………………Page 61……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
架类自动禁用了这两个菜单项。因此还需要为菜单消息添加消息处理函数。同时为了完善菜
单的各种功能,还需要在运行中动态地创建和修改菜单,并添加代码。本节将详细讲解这些
内容。
3。3。1 添加普通菜单的处理函数
1.添加菜单命令处理函数
由 AppWizard 创建的应用程序会在程序运行时自动将菜单资源装入内存 。用户只需要添
加相应消息处理函数即可完成菜单的基本功能。下面以 3。2 节中创建的菜单为例,分步骤讲
解如何为应用程序添加菜单命令消息处理函数。
(1)在 IDE 主菜单栏中依次选择“View|ClassWizard ”菜单命令或者在 IDE 界面中直接
使用快捷键 Ctrl+W 打开“ClassWizard ”对话框,单击“Message Maps ”选项卡。
(2 )添加“月光宝盒”菜单项的消息处理函数。在“Class name ”下拉列表框中选择需
要编辑的类—主框架类 CMainFrame,在“Object IDs ”列表框中选择需要添加处理函数的
命令消息 ID—ID_MOVIE1 “月光宝盒”,双击“Messages ”列表框中的 MAND 或者
在其上单击鼠标左键,然后单击“Add Function ”按钮,为 ID_MOVIE1 添加命令消息处理函
数。在弹出的如图 3…2 所示的对话框中直接单击“OK ”按钮(对话框中函数名为默认的
OnMovie1 ),返回 ClassWizard 对话框。可以看见在“Member functions ”列表中已经添加了
一个名为 OnMovie1 的新函数。
(3 )按照步骤(2 )中的方法,为 ID 为 ID_MOVIE2 “仙履奇缘”的菜单项添加消息处
理函数 OnMovie2() 。添加后的 ClassWizard 对话框内容如图 3…14 所示。
图 3…14 添加了两个命令消息处理函数后的 ClassWizard 对话框
(4 )在“Member functions ”列表框中选择函数 OnMovie1,单击“Edit Code ”按钮, 关
闭 ClassWizard 对话框,自动打开 MainFrm。cpp 文件,并将光标定位在 OnMovie1()函数体中,
·52 ·
…………………………………………………………Page 62……………………………………………………………
第 3 章 菜单与加速键
在这里添加相应代码。这里为 OnMovie1()函数添加如下代码:
void CMainFrame::OnMovie1()
{
// TODO: Add your mand handler code here
MessageBox(〃悟空你也太调皮了,我跟你说过叫你不要乱扔东西,你怎么又…〃;
〃月光宝盒〃);
}
(5 )在 MainFrm。cpp 文件中找到 CMainFrame::OnMovie2()函数,添加如下代码:
void CMainFrame::OnMovie2()
{
// TODO: Add your mand handler code here
MessageBox(〃 曾经有一份真诚的爱情摆在我的面前,但是我没有珍惜…〃;
〃仙履奇缘〃);
}
(6 )保存文件,编译并运行程序,关闭所有文档,依次选择“大话西游|仙履奇缘”可以
得到如图 3…15 所示的运行结果。