




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 界面编程1-菜单Windows应用程序开发的基础是GUI的设计与编程,GUI包括Windows API提供的窗口、菜单、对话框和控件等基本界面元素,以及MFC提供的工具栏和状态栏等组合控件,还有键盘和鼠标等消息响应与事件驱动。这些内容将在本书的第37章中逐个加以讨论,本章介绍菜单的设计与编程。3.1 菜单菜单(menu)是传统GUI程序的主要命令接口,可用键盘和鼠标来访问。虽然菜单是基于文字串的,但是相对于(可视方便的)工具条和(直接快速的)快捷键,菜单所提供的程序功能更为完整和全面。默认的传统MFC应用程序,会在主框架窗口中自动生成一个菜单条(menu bar)。菜单条也叫顶层菜单(
2、top-level menu),一般包含文件、编辑、查看、窗口、帮助等若干下拉菜单。3.1.1 菜单与菜单项菜单可分为包含若干菜单项的弹出菜单和发送命令消息的菜单项两大类,可以用键盘和鼠标这两种输入设备来访问菜单和菜单项(简记为“菜单项”)。1菜单弹出菜单(pop-up menu,简称为菜单)包含若干菜单项,一般处于(诸菜单项都不可见的)关闭状态。只有在用户(通过菜单名或按鼠标右键)激活菜单时,才由操作系统弹出来显示。并在用户通过选中菜单中的某个菜单项而发送对应的命令消息之后,又被操作系统自动关闭。(弹出)菜单又可以进一步分成(菜单条中的)下拉菜单(drop-down menu)和(按鼠标右键
3、后在光标处弹出的)快捷菜单(shortcut menu),参见图3-1 a)。弹出菜单中还可以包含若干(多级)子菜单,由其对应的(右端带的)菜单项激活,参见图3-1 b)。 a) 弹出菜单的种类b) 多级子菜单图3-1 菜单与菜单项2菜单项菜单项(menu item)用于发送程序的命令消息,一般由位于左端的图标或(表示选中的)勾符、简述命令功能的标题(caption)串、唯一标识资源的ID、详细说明命令功能的提示串、对应的加速键资源和事件处理函数等多个部分组成。其中的标题字符串又可包括:菜单名串、访问键、加速键指示串、(表示会弹出一个对话框)省略号“.”和(由系统在弹出菜单时自动生成的,表示对
4、应于子菜单的右向黑三角) 等内容,例如“打开(O) Ctrl+O”、“工具栏(T)”、“类型(T) ”等,参见图3-1。3ID菜单项和其他所有的Windows资源一样,都有ID(IDentifier,标识符)。ID是一个(在全程序中具有唯一性的)非负整数,用于识别资源,供程序代码使用。在Windows编程中,为了便于人类阅读,ID通常是用(以下划线分隔的大写字母单词串组成的)符号常量来表示,如ID_FILE_OPEN。不过,在MFC编程中,一般不需要程序员手工编写符号常量ID的#define宏定义,而是在程序员设置资源的ID属性时,由资源编辑器自动生成。MFC应用程序中的所有ID定义,都位于项
5、目目录下的资源头文件resource.h内。4菜单类与对象在MFC类库中,菜单条和菜单都由CMenu类表示,它是对Windows菜单对象HMENU的类封装。CMenu类是直接从CObject的类派生的:CObjectCMenu但是在MFC编程中一般不需要直接使用该类,除非你需要动态修改菜单项的内容。菜单对象属于主框架窗口,可先用从基类CWnd继承来的GetMenu函数CMenu* GetMenu( ) const;获得菜单条对象的指针(只是临时的,不能保存供以后使用),再用菜单类的成员函数GetSubMenuCMenu* GetSubMenu( int nPos ) const;来获取指定的下
6、拉式弹出菜单,其中nPos为菜单(从0开始的)位置序号。若想在视图类中获得程序的菜单对象,则必须先得到主框架窗口的指针,这可以使用从基类CWnd继承来的GetTopLevelFrame成员函数:CFrameWnd* GetTopLevelFrame( ) const;例如:CFrameWnd *pFrmWnd = GetTopLevelFrame(); / 获取主框架窗口CMenu *pMenu = pFrmWnd-GetMenu(); / 获取菜单条CMenu *pSubMenu = pMenu-GetSubMenu(3); / 获取第4个菜单3.1.2 访问键和快捷键访问键和快捷键都可用于
7、菜单的快速键盘访问。1访问键访问键(mnemonic key,助记键)也叫热键(hot key)是菜单项标题字符串中出现的(可用对应的键盘按键快速访问的)带下划线的字符(一般为大写英文字母),例如菜单条上“文件(F)”菜单中的字母“F”和文件菜单中的“另存为(A)”菜单项的字母“A”。访问键的使用方法有如下两种:l 按“Alt+访问键”,可“选中”当前窗口菜单条上访问键所对应的菜单项,例如按“Alt+F”会打开“文件(F)”菜单。l 按“访问键”本身,可“选中”当前已展开菜单中其所对应的菜单项,例如在已经打开的文件菜单中,按“A”会选中“另存为(A).”菜单项,从而打开对应的“另存为”对话框。
8、2快捷键快捷键(shortcut key)又叫加速键(accelerator key),是由菜单项标题串右端指明的功能键组合,一般为Ctrl/Alt/Shift+大写英文字母或功能键Fn。用快捷键可以直接访问当前窗口的任意菜单项(不论其所在的子孙菜单是否被展开),例如按“Ctrl+O”可以直接选中(尚未打开的)文件菜单中的“打开(O). Ctrl+O”菜单项以打开对应的“打开”对话框。需要注意的是,在MFC编程中,菜单项的快捷键并不是由其标题中的指示串决定的,而是由项目的加速键资源决定的。因此,在设置完菜单项的各种属性之后,程序员还必须使用IDE的快捷键编辑器来将二者关联在一起。3.1.3 默
9、认菜单用MFC应用程序向导建立应用程序时,若选择的是单文档或多文档类型,而不是基于对话框类型,则会自动建立预定义的菜单条。1单文档程序传统的单文档界面MFC应用程序只有一个菜单条,默认时含“文件”、“编辑”、“查看”、“帮助”4个下拉菜单(参见图3-1 a),菜单条的ID为IDR_MAINFRAME。2多文档程序传统的多文档界面MFC应用程序有两个菜单条:l 主框架菜单条:在程序刚启动或没有任何文档子窗口时显示,默认时含“文件”、“查看”、“帮助”3个下拉菜单,菜单条的ID也为IDR_MAINFRAME。l 文档菜单条:在程序有文档子窗口时显示,默认时含“文件”、“编辑”、“查看”、“窗口”、
10、“帮助”5个下拉菜单(增加了一个“窗口”下拉菜单,参见图2-37),ID为IDR_*TYPE,其中*表示应用程序的项目名,例如IDR_TestTYPE。3.1.4 菜单资源在MFC应用程序项目中,菜单资源和其他资源一样,都是以文本方式存在于资源脚本文件中,而对应的资源ID则被定义在资源头文件中。在默认情况下,VC以可视的“资源编辑器”方式来打开资源文件,让程序员进行交互式菜单设计。用资源编辑器编辑菜单等资源的结果,都会被自动保存在这两个资源文件之中。1查看资源文本资源文件指位于MFC应用程序项目目录中的资源脚本文件“项目名.rc”(如Student.rc)和资源头文件Resource.h。似C
11、+头文件和代码文件,也可以用任何文本编辑器(如Windows自带的记事本和写字板),来可以查看和编辑资源头文件和资源脚本文件。也可以用VC来查看和编辑资源文件中的源代码文本。在VC中,以文本方式来打开资源文件的做法有三种(都需先关闭资源编辑器):l 方法1:n 在项目区中选中“解决方案资源管理器”页,选中应用程序的“资源文件*.rc”。n 按鼠标右键,在弹出的快捷菜单中,选“查看代码”菜单项,参见图3-2 a)。l 方法2:n 在项目区中选中“解决方案资源管理器”页,选中应用程序的“资源文件*.rc”。n 按鼠标右键,在弹出的快捷菜单中,选“打开方式”菜单项,也参见图3-2 a)。n 在弹出的
12、“打开方式”对话框中,选中“源代码(文本)编辑器”项,按“确定”关闭对话框,参见图3-2 b)。 a) 文件快捷菜单b) 打开方式对话框图3-2 以文本方式打开资源文件l 方法3:n 在“打开文件”对话框中,选“打开”按钮右端的钮打开下拉式列表,选中其中的“打开方式(W).”项。n 在弹出的“打开方式”对话框中,选中“源代码(文本)编辑器”项,按“确定”关闭对话框,参见图3-2 b)。作为参考,下面给出由MFC应用程序向导自动生成的Student程序的默认资源头文件(Resource.h)和菜单资源文本的内容(位于资源脚本文件Student.rc中)。2资源头文件VC在资源头文件Resourc
13、e.h中定义各种ID符号常量,这些定义由MFC应用程序向导或资源编辑器自动生成,一般不需要自己手工修改。下面是Student程序的初始资源头文件的内容:/NO_DEPENDENCIES/ Microsoft Visual C+ generated include file./ Used by Student.rc/#define IDD_ABOUTBOX100#define IDP_OLE_INIT_FAILED100#define IDR_MAINFRAME128#define IDR_StudentTYPE130/ 新对象的下一组默认值/#ifdef APSTUDIO_INVOKED#if
14、ndef APSTUDIO_READONLY_SYMBOLS#define _APS_NEXT_RESOURCE_VALUE310#define _APS_NEXT_CONTROL_VALUE1000#define _APS_NEXT_SYMED_VALUE310#define _APS_NEXT_COMMAND_VALUE32771#endif#endif2资源脚本文件在MFC项目中,用资源脚本文件“项目名.rc”(后缀rc = resource,资源)来描述程序的各种资源,包括:包含文本、图标、位图、工具栏、菜单、快捷键、对话框、版本、设计信息、字符串表等资源。下面是Student程序的资
15、源脚本文件Student.rc中的默认菜单资源部分:/ 菜单/IDR_MAINFRAME MENUBEGINPOPUP 文件(&F)BEGINMENUITEM 新建(&N)tCtrl+N,ID_FILE_NEWMENUITEM 打开(&O).tCtrl+O,ID_FILE_OPENMENUITEM 保存(&S)tCtrl+S,ID_FILE_SAVEMENUITEM 另存为(&A)., ID_FILE_SAVE_ASMENUITEM SEPARATORMENUITEM 打印(&P).tCtrl+P,ID_FILE_PRINTMENUITEM 打印预览(&V),ID_FILE_PRINT_PRE
16、VIEWMENUITEM 打印设置(&R)., ID_FILE_PRINT_SETUPMENUITEM SEPARATORMENUITEM 最近的文件, ID_FILE_MRU_FILE1,GRAYEDMENUITEM SEPARATORMENUITEM 退出(&X), ID_APP_EXITENDPOPUP 编辑(&E)BEGINMENUITEM 撤消(&U)tCtrl+Z, ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM 剪切(&T)tCtrl+X, ID_EDIT_CUTMENUITEM 复制(&C)tCtrl+C,ID_EDIT_COPYMENUITEM
17、粘贴(&P)tCtrl+V, ID_EDIT_PASTEENDPOPUP 视图(&V)BEGINMENUITEM 工具栏(&T),ID_VIEW_TOOLBARMENUITEM 状态栏(&S),ID_VIEW_STATUS_BARENDPOPUP 帮助(&H)BEGINMENUITEM 关于 Student(&A)., ID_APP_ABOUTENDEND3.2 设计菜单在应用程序设计中,一般需要对自动产生的默认菜单进行编辑(修改/添加/删除)。在菜单编辑器中,可以添加(下拉式弹出)菜单,在菜单中添加菜单项,为菜单项设置ID、标题串、访问键、快捷键、提示文本串和其他属性。注意:在编程过程中,对
18、VC的任何操作,都可以取消和恢复:l 按Ctrl+Z或选“编辑撤销”菜单项或单击工具条中的钮,可取消前一次的操作;l 按Ctrl+Y或选“编辑重复”菜单项或单击工具条中的钮,可恢复前一次的操作。3.2.1 菜单设计的步骤与实例本小节先给出菜单设计的一般步骤与过程,然后创建一个名为Student的传统单文档界面MFC应用程序实例。在本章的后续内容中,将结合该例讲解使用IDE进行MFC菜单设计的具体方法和详细步骤。1菜单设计的步骤普通菜单设计的主要步骤有:插入菜单、添加菜单项、键入包含访问键(和加速键指示串)的标题串、修改菜单项的ID、设置提示串、(联接加速键、添加图标资源和代码、)添加菜单项响应
19、、编写菜单事件处理的代码,参见图3-3(其中粗体部分为重点步骤)。打开菜单资源打开资源视图展开Menu项双击菜单ID插入菜单选中后一菜单按Insert键输入菜单名和访问键添加菜单项按回车键键入含访问键(&大写英文字母)、省略号和加速键指示串的标题串设置菜单属性打开属性窗口修改菜单项ID输入提示串联接加速键展开Accelerator资源项双击菜单ID选择菜单项ID、修饰符和(虚拟)键添加菜单响应选中一菜单项后按鼠标右键选“添加事件处理程序”菜单项选择消息类型选中对应的类按“添加编辑”钮编写菜单事件处理代码添加图标添加Bitmap资源项绘制位图修改ID编写代码图3-3 菜单设计的主要步骤2菜单设计
20、的实例为了演示菜单的设计与编辑过程,我们用MFC应用程序向导创建一个(类似于2.4.2中第4部分的STest程序的)具有传统界面的单文档MFC应用程序Student,其运行结果如图3-4所示。a) 初始时 b) 完成菜单设计后图3-4 Student程序的运行结果3.2.2 菜单编辑器和属性窗口下面介绍在设计菜单中要用到的菜单编辑器、属性窗口和若干常用菜单属性,参见图3-5。图3-5 菜单编辑窗口1打开菜单编辑器l 在VC左中部的项目工作区中选“资源视图”页(如果没有,可以选“视图资源视图”菜单项或按“Ctrl+Shift+E”组合键),参见图3-5的左部。l 单击“Student”项左边的+
21、号框,展开各个资源文件的列表(此时只有一个文件Student.rc);单击其中“Student.rc”项左边的+号框,展开各类资源的树形列表;单击其中“Menu”项左边的+号框,展开所有的菜单资源的ID列表。说明:如果资源头文件或资源脚本文件已经被打开,则在展开“Student.rc”项左边的+号框时,会报错“在另一个编辑器中打开”,参见图3-6。这是VC为了维护资源的一致性而采取的一种措施,目的是避免同时以文本和可视方式打开和编辑资源文件,可能会产生的二者内容不一致的冲突。解决办法是,先关闭资源头文件和资源脚本文件,接着单击“Student.rc”项左边的-号框折叠,然后再单击“Studen
22、t.rc”项左边的+号框展开即可。图3-6 展开资源文件时报错l 双击要编辑的菜单资源的ID(此时只有一个IDR_MAINFRAME),则VC会在中部的编辑区打开菜单编辑器及对应的菜单资源供你编辑,参见图3-5的中部。编辑菜单和菜单项时,还需要使用属性窗口。2属性窗口l 打开:选“视图其它窗口属性窗口”菜单项或按“Alt+Enter”组合键,打开属性窗口,它通常位于VS窗口的左边,其默认页一般为按分类顺序排列的属性页,参见图3-5的右部。l 钉住:为了避免属性窗口自动隐藏,可单击其右上角的钉子形标识,将其“钉在”屏幕上(此时钉子形标识变成了)。l 编辑:在属性窗口中单击对应属性项的右栏,选择其
23、下拉式列表中的项,或输入/修改其中的文本串。3常用菜单属性下面(按属性窗口中的分类)列出若干常用的菜单项属性,其中用粗体字表示的是属性的默认值和几个最重要的属性。l 外观:n Caption(标题):空/文本串,为菜单项的描述串,含必须的菜单名与访问键、及可选的省略号与快捷键指示串。菜单项标题的完整格式为:菜单项名称(&访问键字符).t快捷键指示串例如:“文件(&F)”、“新建(&N)tCtrl+N”、“打开(&O).tCtrl+O”、“&File”。其中:u 菜单项名称可用中文词组或英文单词,应该尽量简洁。u 编辑时访问键一般由and符(即C/C+语言中的取地址符/引用符/与符)“&”和一个
24、英文字母组成,运行时则显示为带下划线的字母。l 若使用的是中文菜单名,则访问键一般位于菜单名串后的圆括号内,而且访问键字符一般为对应英文菜单名单词的大写首字母。l 若使用的是英文菜单名,则将访问键的&符直接放在快捷键字母(一般为单词的首字母)的前面即可。u 由3个句点字符组成的省略号“.”提示用户,选中该菜单项会弹出对话框。该部分虽不是必须的,但却是编程惯例,应该尽量遵循。u 如果菜单项有快捷键,则应该给出其对应组合键的指示串,并在前面添加在水平跳格(Tab,制表符)转移字符“t”,使在该指示串前留出空白且在弹出菜单中右对齐。注意,在MFC中,标题串中的快捷键指示串,只能对用户起提示作用,并不
25、能真正设置快捷键。设置快捷键的具体方法,参见后面的3.4节。n Checked(选中):True/False(真/假),表示该菜单项是否被用户选中,用于布尔型菜单项。若为True,则会在菜单项的左边出现钩形的选中图符。在编辑菜单项时,可以通过单击选中菜单项的左端矩形框,来切换其取值True/False。n Enabled(启用/激活):True/False,表示该菜单项的功能是否可用。当取值为True/Flase时,菜单项启用(激活)/ 禁用(灰化),且其标题文本在编辑和运行时都显示为黑色/灰色的。注意,在MFC中,没有添加事件处理程序(消息响应函数)的菜单项自动为不可用,而添加了事件处理程序
26、的菜单项自动为可用。即该属性的设置,对MFC是无效的。在MFC中,必须通过响应菜单项的用户界面更新命令消息UPDATE_COMMAND_UI,来实现启用和禁用菜单项的功能,参见后面的3.4.5小节。注意:禁用与启用状态,对直接位于菜单条中的菜单项是无效的,但对于位于下拉式或浮动式弹出菜单中菜单项则是有效的。n Pupup(弹出):(对顶层菜单为)True/(对菜单项为)False,属性值为真和假分别对应于(下拉式)弹出菜单和菜单项。弹出菜单必须选True,而菜单项则必须选False。对取值为False的菜单项,可以设置ID并添加事件处理程序,但是对取值为True的弹出菜单则不能。注意,在菜单条
27、中也可以放置菜单项,即顶层菜单项,但需要将菜单的Pupup属性值修改为False。l 杂项n Help(帮助):True/False,对顶层菜单,若Help属性值为True,则指定该菜单及其右边的菜单都在菜单条上右对齐(参见图3-7)。这是老式的Windows程序风格,现在一般不再使用。注意,本属性对菜单项无效。图3-7 Help属性为True的“帮助”菜单n ID(标识符):ID_nnnnn/(由大写英文字母和下划线组成的)符号常量文本串(对应于一个整数常量,定义在resource.h头文件中),标识该菜单项资源,用于消息处理和对象指定。菜单项的标识符一般形为:ID_菜单的英文名_菜单项的英
28、文名,例如“文件打开”菜单项的标识符为ID_FILE_OPEN。还可以单击该属性项右栏,会出现的下拉式列表框,再单击其右端的钮,然后在列表中选择想要的(已有)ID。本属性对(Popup属性都为True的)弹出菜单是不可用的,因为其事件响应(显示弹出菜单)不由用户程序处理,而是由操作系统负责。n Prompt(提示):空/(以n分隔的)文本串,为菜单项的详细说明文本,例如“打开现有文档n打开”。当用户选择该菜单项时,“n”前的内容会显示在程序窗口的状态条中;当鼠标停留在该菜单项所对应的工具条中的按钮上时,提示串中“n”后的内容会显示在一个小浮动框中。该属性对弹出菜单无效。n Separator(
29、分隔条):True/False,为True时菜单项变成分隔条,用于在菜单项列表中分隔菜单项组。例如,默认的文件菜单中,菜单项被三个分隔条分成了四个组(参见图3-5中部)。该属性对弹出菜单也不可用。3.2.3 编辑菜单下面介绍使用菜单编辑器和属性窗口进行菜单和菜单项编辑的具体方法。1添加菜单在MFC应用程序中,一般需要在已有菜单条中添加自己的(下拉式顶层)弹出菜单。例如在本例Student中,要在已有的“帮助”菜单前,插入3个新菜单:“姓名(&N)”、“成绩(&S)” 和“测试(&T)”。l 加入新(弹出)菜单n 添加新菜单如果要在菜单条中所有已有(下拉式顶层)菜单的右边添加新的(弹出)菜单,可
30、以直接选中菜单条最右端的“请再此处键入”虚框。n 插入新菜单为了在菜单条中(已有的)某个菜单的左边插入新菜单,可先选中该菜单,然后u 按Insert键。u 或按鼠标右键,在弹出的快捷菜单中选“新插入”菜单项。u 或选“编辑菜单新插入”菜单项。则会在所需位置出现空白菜单(矩形虚框),其下面还带有添加菜单项的“请在此处键入”虚框,参见图3-8。图3-8 添加新菜单l 键入菜单名和访问键:在空白菜单的矩形虚框中直接键入菜单名和访问键(以后还可在属性窗口中的Caption栏中对其进行修改)。n 中文:菜单名(&访问键字母),如“文件(&F)”,显示为“文件(F)”。n 英文:菜单名左部&访问键字母菜单
31、名右部,如“&File”,显示为“File”。在键入或修改菜单名和访问键后必须按回车键,才能完成了菜单的添加。可以开始设置菜单属性和添加新菜单项了。l 设置菜单属性:除了键入的菜单名和访问键外,弹出菜单的其他菜单属性选项一般使用默认值,如Enabled和Popup为True、Break为None、其余选项为False或空。2添加菜单项l 选中菜单:首先需要选中需要添加菜单项的(顶层或子弹出)菜单。l 加入菜单项:n 添加新菜单项:如果要在菜单中所有已有菜单项的下面添加新菜单项,可以直接选中菜单最下面的“请在此处键入”虚框,参见图3-9。图3-9 添加新菜单项n 插入新菜单项:为了在菜单中(已有
32、的)某个菜单项的上面插入新菜单项,可先选中该菜单项,然后u 按Insert键。u 或按鼠标右键,在弹出的快捷菜单中选“新插入”菜单项。u 或选“编辑菜单新插入”菜单项。则会在所需位置出现空白菜单项(矩形虚框),其右边还带有添加子菜单项的“请再此处键入”虚框。l 键入标题串:在空白菜单项的矩形虚框中键入菜单项名、访问键、(对话框)省略点和快捷键串,后两项是可选的。一般形为“菜单名(&字母).t切换键+字母”,例如“李四(&L).tShift+L”,参见图3-10。按回车键完成菜单项的添加。图3-10 键入菜单项的标题串l 设置ID:在属性窗口中的ID栏中选择(已有的)、修改(默认的)或键入(新的
33、)形如ID_MenuName_MenuItemName的(用下划线分隔的大写字母串)符号常量。例如ID_FILE_OPEN、ID_NAME_ZS。注意:n 菜单项ID的默认值一般形为ID_nnnnn(如ID_32771),不应该直接使用该值,因为它既不利于自动生成有意义的事件处理程序的名称,又不利于程序的阅读和维护。n 在键入ID值后必须按回车键,才能完成ID值的修改,不然键入的ID值会被自动丢失。n 对Popup属性为True的(下拉和快捷式)弹出菜单不能设置ID。l 键入提示:在属性窗口的Prompt(提示)栏中键入与菜单项有关的信息,形为“状态条中显示的长文本串n工具条按钮旁浮动显示的短
34、文本串”,中间的“n”为换行(New line)转移字符。当用户用鼠标或键盘加亮该菜单项时,在状态条中显示该信息中“n”前的文本串。如“文件”菜单中的“打开”菜单项的提示信息默认为:“打开现有文档n打开”。提示串中“n”后的内容,会在鼠标停留在菜单项ID所对应的工具条按钮上时,浮动显示。例如,Student例在“姓名”菜单中添加了“张三”、“李四”和“王五”3个菜单项,参见表3-1。在“成绩”菜单中添加了“数学”、“英语”和“计算机”3个菜单项,参见表3-2。表3-1 姓名菜单项的属性值菜单项 属性CaptionIDPrompt张三张三(&Z)tShift+ZID_NAME_ZS学生张三的信息
35、n张三李四李四(&L)tShift+LID_NAME_LS学生李四的信息n李四王五王五(&W)tShift+WID_NAME_WW学生王五的信息n王五表3-2 成绩菜单项的属性值菜单项 属性CaptionIDPrompt数学数学(&M)ID_SCORE_MATH数学成绩n数学英语英语(&E)ID_SCORE_ENG英语成绩n英语计算机计算机(&C)ID_SCORE_COMP计算机成绩n计算机l 在菜单条中增加菜单项:似在菜单条中添加顶层菜单,只是必须将其Popup属性值修改为“False”。而且还需要像其他菜单项那样,设置ID、提示串和快捷键等。但是不能在顶层菜单项的标题属性中加入快捷键显示串
36、,因为在运行时,它会挤占菜单项名的位置。例如,Student例中的“测试”就是菜单条中的顶层菜单项,其标题串为“测试(&T) ”(没有快捷键指示串)、ID值为“ID_TEST”、提示串为“测试顶层菜单项n测试”、快捷键为“Ctrl+T”。3菜单资源文本Student例所对应的菜单资源文本为(位于资源脚本文件Student.rc中的IDR_MAINFRAME菜单资源内的“视图”和“帮助”弹出菜单之间): POPUP 姓名(&N) BEGIN MENUITEM 张三(&Z)tShift+Z,ID_NAME_ZS MENUITEM 李四(&L)tShift+L,ID_NAME_LS MENUITEM
37、 王五(&W)tShift+W,ID_NAME_WW END POPUP 成绩(&S) BEGIN MENUITEM 数学(&M),ID_SCORE_MATH MENUITEM 英语(&E),ID_SCORE_ENG MENUITEM 计算机(&C),ID_SCORE_COMP ENDMENUITEM 测试(&T),ID_TEST对应的ID符号常量似(位于资源头文件Resource.h中):#define IDB_MATH130#define IDR_EDIT_MENU131#define ID_NAME_ZS32771#define ID_NAME_LS32772#define ID_NAM
38、E_WW32773#define ID_SCORE_MATH32774#define ID_SCORE_ENG32775#define ID_SCORE_COMP32776#define ID_TEST32777对应的提示串资源为(位于文件Student.rc中串表部分):STRINGTABLE BEGIN ID_NAME_ZS 学生张三的信息n张三 ID_NAME_LS 学生李四的信息n李四 ID_NAME_WW 学生王五的信息n王五 ID_SCORE_MATH 数学成绩n数学 ID_SCORE_ENG 英语成绩n英语 ID_SCORE_COMP 计算机成绩n计算机 ID_TEST 测试顶层
39、菜单项n测试END4添加分隔条分隔条(separator)用于分隔菜单中的菜单项组,添加分隔条的方法有两种:l 可在菜单中需要的位置添加或插入空白菜单项,在属性窗口的Separator项中设置属性值为True(默认为False)。l 或在后一菜单项上按鼠标右键,在弹出的菜单中选择“插入分隔符”菜单项。5添加子菜单选中相应菜单项,就可用其右边的“请再此处键入”虚框,来加入子菜单的新菜单项。添加了子菜单项后,会在该菜单项右边自动出现(代表该菜单项有子菜单的)三角形标识。其他操作与在菜单中添加菜单项的相同。6修改菜单属性可在属性窗口中,通过修改各种设置与选项来修改菜单项的属性。7删除菜单选中菜单项,
40、按Delete/Del键就可以删除它。3.2.4 联接快捷键在菜单项标题中的快捷键指示串,只是用于显示给用户观看,并没有真正设置快捷键。为了使快捷键起作用,还必须打开快捷键编辑器窗口和对应的属性窗口来添加和修改快捷键设置,具体方法在下面介绍。1快捷键编辑器展开VC项目工作区“资源视图”页中的资源列表中的“Accelerator”(加速键/快捷键)项,双击里面的“ID_MAINFRAME”项(在Student例中对应的是“StudentStudent.rcAccelerator ID_MAINFRAME”项),则会打开快捷键编辑器窗口(位于VS窗口的中部)和对应的属性窗口(位于VS窗口的右部),
41、参见图3-11。图3-11 快捷键编辑器窗口和对应的属性窗口2设置快捷键的步骤修改或添加快捷键的具体步骤:1. 选中快捷键编辑器窗口中的某一已有条目或最下面的空条目(空白矩形框)。2. 设置IDl 单击快捷键编辑器窗口中该条目左端的“ID”栏。l 或选中快捷键属性窗口最底端的“ID”属性项的右栏。会出现带下拉列表的文本输入组合框,在其中键入或选择某一已有菜单项的ID,参见图3-12。图3-12 选择快捷键ID3. 设置修饰符:修饰符可以为空,也可以是Alt、Ctrl和Shift等键的任意组合,默认为“无”。l 单击快捷键编辑器窗口中该条目的“修饰符”栏,可在下拉列表中选择所需要的修饰符的组合,
42、参见图3-13 a)。l 或修改快捷键属性窗口中“行为”栏的Alt、Ctrl和Shift属性项的取值为True或False,参见图3-13 b)。 a)b)图3-13 设置快捷键的修饰符4. 设置键值l 单击快捷键编辑器窗口中该条目的“键”栏。l 或选中快捷键属性窗口中行为栏的“Key”属性项的右栏。可在其中直接键入可打印字符(如大小写英文字母和数字等),也可以从下拉列表中选择所需要的虚拟键,默认为回车键“VK_RETURN”。常用的虚拟键见表3-3。表3-3 常用虚拟键种类虚拟键功能键VK_F1(F1)VK_F12(F12)方向键VK_UP()、VK_DOWN()、VK_LEFT()、VK_
43、RIGHT()翻页键VK_PRIOR(PageUp/PgUp)、VK_NEXT(PageDown/PgDn)运算符键VK_ADD(+)、VK_SUBTRACT(-)、VK_MULTIPLY(*)、VK_DIVIDE(/)插删键VK_INSERT(Insert/Ins)、VK_DELETE(Delete/Del)始末键VK_HOME(Home)、VK_END(End)其他键逃逸键VK_ESCAPE(Esc)、空格键VK_SPACE、跳格键VK_TAB(Tab)、退格键VK_BACK(BackSpace)、回车键VK_RETURN(Enter)5. 设置键的类型l 单击快捷键编辑器窗口中该条目的“
44、类型”栏。l 或选中快捷键属性窗口中行为栏的“Type”属性项的右栏。可以从下拉式列表中选择VIRTKEY(默认)/ASCII,指定键值的类型是虚拟键还是ASCII字符,一般采用默认的虚拟键类型。注意:l 快捷键中不能使用单个Alt键作为修饰符,因为它是Windows系统保留的专用快捷(访问)键,用于在应用程序中选择菜单条或打开顶层菜单。l 应避免在同一应用程序中有多个ID使用同一快捷键。3快捷键的资源文本Student例的快捷键在资源文件Student.rc中自动生成的对应文本段为(按ID的字母顺序排列,粗体字为新增加的部分):/ Accelerator/IDR_MAINFRAME ACCE
45、LERATORS BEGIN C, ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT VK_INSERT, ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT VK_DELETE, ID_EDIT_CUT, VIRTKEY, SHIFT, NOINVERT X, ID_EDIT_CUT, VIRTKEY, CONTROL, NOINVERT V, ID_EDIT_PASTE, VIRTKEY, CONTROL, NOINVERT VK_INSERT, ID_EDIT_PASTE, VIRTKEY, SHIFT, NOINVERT V
46、K_BACK, ID_EDIT_UNDO, VIRTKEY, ALT, NOINVERT Z, ID_EDIT_UNDO, VIRTKEY, CONTROL, NOINVERT N, ID_FILE_NEW, VIRTKEY, CONTROL, NOINVERT O, ID_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT P, ID_FILE_PRINT, VIRTKEY, CONTROL, NOINVERT S, ID_FILE_SAVE, VIRTKEY, CONTROL, NOINVERT L, ID_NAME_LS, VIRTKEY, SHIFT, NOIN
47、VERT W, ID_NAME_WW, VIRTKEY, SHIFT, NOINVERT Z, ID_NAME_ZS, VIRTKEY, SHIFT, NOINVERT VK_F6, ID_NEXT_PANE, VIRTKEY, NOINVERT VK_F6, ID_PREV_PANE, VIRTKEY, SHIFT, NOINVERT T, ID_TEST, VIRTKEY, CONTROL, NOINVERTEND3.2.5 添加菜单项图标菜单项图标(图像标识,logo)用于可视化标识菜单项,一般与工具条上对应的图标一致,不过尺寸要小一些。但是,VC在菜单编辑器和属性窗口中,并没有提供添加
48、菜单项图标的功能。为了给菜单项添加图标,必须先创建图标的位图资源,然后再在初始化函数中编写设置菜单项图标的代码。注意:因为菜单项的图标和选中图符占用同一位置,所以它们是互相排斥的。添加了图标的菜单项,就不再会出现选中图符了。1创建位图资源菜单项图标所用的位图要求是12像素宽11像素高,16色(4位)或256色(8位)。位图可以使用VS提供的位图编辑器进行手工绘制和编辑,也可以从已有的位图文件导入。下面是创建位图资源的具体操作步骤:1) 添加位图资源有两种方法,方法1使用添加资源对话框,适用于所有情形;方法2则直接插入位图资源,只适用于项目资源中已有位图资源的情形(默认的项目资源中是没有位图资源
49、的)。l 方法1:将项目区切换到“资源视图”页,在资源文件项(如“Student Student.rc”)上按鼠标右键。在弹出的资源快捷菜单中选“添加资源”菜单项,参见图3-14。再在弹出的“添加资源”对话框中,选中“Bitmap”项,按“新建”钮,参见图3-15。 图3-14 资源快捷菜单图3-15 添加资源对话框l 方法2:如果原来项目资源中已有位图资源,则可在资源视图页中展开资源项,并直接定位里面的位图项Bitmap(如“Student Student.rcBitmap”),并在其上按鼠标右键,然后在弹出的位图快捷菜单中选“插入Bitmap”项,参见图3-16。则VC会自动创建一个ID为
50、IDB_BITMAPi(其中i=1、2、)的新(空白)位图资源项,并打开位图编辑器供你编辑,参见图3-17。可以利用新出现的“图像”菜单(参见图3-18)、“图像编辑器”工具条(参见图3-19)和(位于属性窗口上部的)“颜色”窗口(若看不见颜色窗口,可用“图像显示颜色窗口”菜单项打开它)中的调色板进行图形绘制,具体使用方法似Windows操作系统在附件软件组中提供的“画图”程序。可以通过在颜色调色板中的色块上单击左/右鼠标键,来设置当前绘图所用的前/背景色。图3-17 位图编辑器 图3-16 位图快捷菜单图3-18 图像菜单(左)及其工具子菜单(右)图3-19 图像编辑器工具条2) 导入现有位
51、图如果已有现存的位图文件可供使用,则可以利用图3-15所示的“添加资源”对话框来到入现有位图。做法是,选对话框左边“资源类型”栏中的“Bitmap”项,再选右边的“导入”按钮,在弹出的“导入”文件对话框中,选择想要图片文件。可以导入多种类型和格式的图片,如bmp、gif、jpg、png等位图文件,ico图标文件和cur光标文件。在导入图片文件后,VS也会创建一个新的位图资源项IDB_BITMAPi,并打开位图编辑器,装入位图文件供你编辑。3) 编辑位图l 打开位图节点属性窗口:选中资源页中的位图ID(如IDB_BITMAP1),则系统会打开对应的位图节点属性窗口,参见图3-17的右下部分。l
52、修改位图文件名:在属性窗口的Filename项中,将原来的文件名(如resbitmap1.bmp)改为指定的文件名(如resmath.bmp)。l 修改位图ID:在属性窗口中的ID项中,将原ID(如IDB_BITMAP1)修改为指定的ID(如IDB_MATH),按回车键完成修改。l 打开位图编辑器属性窗口:单击位图编辑器中的位图网格区,则系统会打开对应的位图编辑器属性窗口,参见图3-20 a)。 a)b)图3-20 位图编辑器属性窗口l 修改位图文件名:在属性窗口的Filename项中,将原来的文件名(如d:Studentresbitmap1.bmp)改为指定的文件名(如d:Studentre
53、smath.bmp)。当你离开该项或按回车键时,系统会弹出一个选择信息对话框(参见图3-21),按钮“是”或“否”对应于是否装入已有的文件(如math.bmp)来覆盖当前位图编辑器中的位图。如果选择“否”,虽然不会装入,但是在保存当前位图时,仍然会用当前位图内容覆盖指定的文件(如math.bmp)。图3-21 加载选择对话框l 修改位图的大小:默认位图为4848(像素宽像素高),而菜单项的位图要求是1211。可以在属性窗口中修改Height和Width属性,也可以直接拖动位图的边框来修改其大小,参见图3-20 b)。l 绘制图形:可以利用IDE中新增加的“图像”菜单、图像编辑器工具条和(位于属性窗口上部的)颜色窗口,在中部的图像编辑器窗口中绘制位图(如)。l 粘贴图像:也可以在其他地方抓取一幅位图,粘贴到现在的空白位图中,然后再做适当的修改。2相关类和成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 触觉体验触觉反馈背心企业制定与实施新质生产力战略研究报告
- 轮滑世界杯企业制定与实施新质生产力战略研究报告
- 税务发票AI应用行业深度调研及发展战略咨询报告
- 电脑操作设置指南
- 绘本的秘密课件
- “十三五”重点项目-防护面罩面具项目可行性研究报告
- 中国汽车消声器行业发展前景预测及投资方向研究报告
- 课题申报书:基于社交平台网络教研的模式研究
- 2025至2030年中国就地显示仪行业投资前景及策略咨询研究报告
- 2025至2030年中国小腰刀数据监测研究报告001
- 24年10月自考14237手机媒体概论试题及答案
- 扬尘防治(治理)监理实施细则(范本)
- 华为智慧矿山解决方案
- 幼儿园办园行为督导评估指标体系表
- 房地产项目能源管理制度制定
- 核心素养下小学道德与法治实践性作业设计探究
- DB11∕T 161-2012 融雪剂 地方标准
- 会务活动质量保障措施
- 2024-2025学年广东省珠海市高三(上)第一次摸底考试物理试卷(含答案)
- 游轮产品相关项目实施方案
- 部编版小学语文五年级下册第5单元语文要素解读
评论
0/150
提交评论