当前位置:松语文学 > 其他类型 >VC++_6.0程序设计从入门到精通最新章节 > VC++_6.0程序设计从入门到精通TXT下载
错误举报

第 14 章

  之冲突的处理函数。

  3.2 菜单和加速键的创建

  在程序中使用菜单和加速键,首先需要创建相应的资源。菜单和加速键资源告诉Windows

  系统自动为程序绘制菜单,并将与菜单和加速键相关的用户cāo作作为命令消息发送给程序的

  窗体。资源的存在大大简化了程序的处理,是Windows 系统程序设计的一个重要部分。

  下面分别介绍菜单和加速键资源的创建过程。

  3.2.1 菜单的创建

  实例3-1:创建菜单实例。源代码在光盘中“\03\实例3-1\test1”目录下。

  1.创建工程

  用AppWizard 创建一个MDI 工程,工程名为test1。

  创建工程后,可以发现自动生成的应用程序框架中已包含了默认的菜单,根据用户在创

  建时的不同选项,默认菜单中的菜单项有所不同。对于SDI 应用程序,只生成一个菜单,其

  枫叶文学网www.fywxw.com

  Visual C++ 6.0 程序设计从入门到精通

  ·48·

  资源ID 为IDR_MAINFRAME(资源ID 用于标识资源,程序装入资源需要指定该ID 来确定

  需要装入哪个资源),这是整个应用程序共用的菜单。对于MDI 应用程序,要生成两个菜单,

  其资源ID 分别为IDR_MAINFRAME 和IDR_工程名TYPE,当应用程序尚未打开文档时显

  示第一个菜单,打开文档后显示第二个菜单。

  2.添假菜单资源

  添加菜单资源。演示如何为资源ID 为IDR_MAINFRAME 的菜单资源添加一个包含“月

  光宝盒”和“仙履奇缘”两个子菜单项的“大话西游”菜单项。其步骤如下:

  (1)在集成开发环境(IDE)中单击左侧工作区窗口中的“ResourceView”选项卡,在

  树状列表中单击展开“Menu”节点,找到需要编辑的菜单资源的ID,双击就可以打开该菜

  单资源的编辑界面,如图3-4 所示。

  图3-4 菜单资源编辑界面

  (2)双击 “帮助”菜单项右侧的虚线框,弹出新建顶层菜单项的属xìng编辑对话框,如

  图3-5 所示。注意,这个虚线框可以用鼠标拖动到顶层菜单的任何位置。在“Caption”文本

  框中输入菜单项的标题“大话西游(&D)”。标题中“&D”的作用是在程序运行时用户可以

  按Alt+D 组合键直接打开该菜单项,在显示时,“&D”会自动转换为添加了下划线的“D”,

  如图3-6 所示。“Pop-up”复选框默认被选中,表明这是一个弹出菜单项,允许有子菜单。

  图3-5 添加“大话西游”菜单项

  枫叶文学网www.fywxw.com

  第3 章 菜单与加速键

  ·49·

  图3-6 “大话西游”菜单项

  (3)关闭如图3-5 所示的对话框,单击资源编辑器中“大话西游”的菜单项,会显示它

  的下层菜单,如图3-6 所示。因为还没有添加任何子菜单项,所以“大话西游”的下层菜单

  是空的,显示为一个虚线框。在图3-6 中单击这个虚线框,弹出类似于图3-5 的属xìng编辑对

  话框,如图3-7 所示。

  图3-7 添加“月光宝盒”菜单项

  其中,在“ID”文本框中输入“ID_MOVIE1”,“Caption”文本框中输入“月光宝盒(&Y)”,

  “Prompt”文本框中输入“打开电影《大话西游之月光宝盒》”。标题中的“&Y”表示打开“大

  话西游”菜单项后,在键盘上按“Y”键可以直接选择“月光宝盒”菜单项。当鼠标光标移

  动到“月光宝盒”这个菜单项上时,会在程序的状态栏中显示“Prompt”文本框中的内容,

  即“打开电影《大话西游之月光宝盒》”。回车关闭属xìng编辑对话框,保存修改。

  (4)按照步骤(3)的方法加入菜单项“仙履奇缘”,其属xìng对话框如图3-8 所示。

  图3-8 添加“月光宝盒”菜单项

  (5)完成两个子菜单项的添加后,在资源编辑器中得到如图3-9 所示的效果。

  图3-9 添加完成后的“大话西游”菜单项

  3.2.2 加速键的创建

  键盘加速键是应用程序中定义的某些组合键,按下组合键可以快捷地选择相应的菜单项

  枫叶文学网www.fywxw.com

  Visual C++ 6.0 程序设计从入门到精通

  ·50·

  和执行某些相应的cāo作。加速键可以和菜单项相关联,也可以定义某些菜单上没有提供的命

  令。例如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)双击编辑界面右侧客户区最下方的虚线框,打开一个加速键属xìng编辑对话框,如图

  3-11 所示,在该对话框中即可添加新的加速键。

  在属xìng编辑对话框的“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 加速键资源编辑界面

  枫叶文学网www.fywxw.com

  第3 章 菜单与加速键

  ·51·

  图3-11 “月光宝盒”加速键资源编辑界面

  (3)按照步骤(2)中的方法,加入加速键Ctrl+L 与“仙履奇缘”菜单项的对应,相应

  的属xìng对话框如图3-12 所示。

  图3-12 “仙履奇缘”加速键资源编辑界面

  (4)完成加速键的添加后,为了完善用户界面,需要在菜单项标题中添加加速键的说明。

  在IDE 左侧的“ResourceView”选项卡中,展开“Menu”节点,双击IDR_MAINFRAME 进

  入IDR_MAINFRAME 菜单资源编辑界面。然后在IDE 右侧客户区中单击“大话西游”菜单

  项,弹出子菜单,在“月光宝盒”菜单项上双击鼠标左键,弹出属xìng编辑对话框,将“Caption”

  文本框中的标题修改为“月光宝盒(&Y)\tCtrl+Y”,如图3-13 所示。其中“\t”表示“Ctrl+Y”

  的显示与前面“月光宝盒(&Y)”之间隔一个制表位(Tab)。

  图3-13 添加“月光宝盒”的加速键说明

  (5)参照前一步,在“仙履奇缘”菜单标题中加上Ctrl+L 的加速键说明。

  3.3 添加菜单所需处理函数

  前一节介绍了创建和添加菜单资源的方法,但添加菜单资源只是创建菜单的第一步。用

  户编译执行前一节的例子就会发现,运行时关闭所有文档,程序显示的IDR_MAINFRAME

  菜单中“大话西游”下的两个菜单项都是禁用的。这是因为缺少相应的用户处理函数,主框

  枫叶文学网www.fywxw.com

  Visual C++ 6.0 程序设计从入门到精通

  ·52·

  架类自动禁用了这两个菜单项。因此还需要为菜单消息添加消息处理函数。同时为了完善菜

  单的各种功能,还需要在运行中动态地创建和修改菜单,并添加代码。本节将详细讲解这些

  内容。

  3.3.1 添加普通菜单的处理函数

  1.添加菜单命令处理函数

  由AppWizard 创建的应用程序会在程序运行时自动将菜单资源装入内存。用户只需要添

  加相应消息处理函数即可完成菜单的基本功能。下面以3.2 节中创建的菜单为例,分步骤讲

  解如何为应用程序添加菜单命令消息处理函数。

  (1)在IDE 主菜单栏中依次选择“View|ClassWizard”菜单命令或者在IDE 界面中直接

  使用快捷键Ctrl+W 打开“ClassWizard”对话框,单击“Message Maps”选项卡。

  (2)添加“月光宝盒”菜单项的消息处理函数。在“Class ncom”下拉列表框中选择需

  要编辑的类—主框架类CMainFrcom,在“Object IDs”列表框中选择需要添加处理函数的

  命令消息ID—ID_MOVIE1“月光宝盒”,双击“Messages”列表框中的COMMAND 或者

  在其上单击鼠标左键,然后单击“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()函数体中,

  枫叶文学网www.fywxw.com

  第3 章 菜单与加速键

  ·53·

  在这里添加相应代码。这里为OnMovie1()函数添加如下代码:

  void CMainFrcom::OnMovie1()

  {

  // TODO: Add your command ha

  松语文学免费小说阅读_www.16sy.com