第2章 菜单、工具栏和状态栏的设计
在Windows应用程序中,菜单、工具栏、状态栏等内容都是不可缺少的界面元素。菜单是一系列可视的命令列表,用户能够选中其中的菜单项(命令)并执行相应任务。工具栏提供图形按钮,实现快捷操作,用户可以通过工具栏执行最常用的命令,增强方便程度。在状态栏中,可以显示动态的提示信息,便于用户的一些操作。
2.1 设计菜单
菜单为用户控制程序提供了一套分级选项,无论是标准菜单及命令,还是热键或弹出式菜单,以及为菜单或其命令定义加速键和状态条提示,都可用菜单编辑器来完成;除此之外,菜单项作为一个普通的对象也可在编辑时进行移动、复制、删除等操作。图2.1是一个典型的菜单实例,图中包含了标准菜单命令、快捷键、加速键、子菜单、核对符等。这些都是编写程序时经常遇到的。下面我们就介绍如何创建和编辑菜单项。
图2.1 典型菜单实例
2.1.河虾的做法1 用编辑器设计菜单
当用户使用AppWizard创建SDI或MDI应用程序时,系统将为用户自动生成默认的菜单栏。用户需要做的工作仅仅是打开菜单编辑器,进行必要的修改,再编写菜单选项相应的消息处理函数即可。当然也可在菜单编辑器中创建新的菜单或创建新的菜单资源,如快捷菜单等。
无论是编辑已有菜单资源还是创建新的菜单资源,首先应当进入菜单资源编辑器。
例2.1 在菜单编辑器的”文件(F)”下拉的某个位置加一个菜单,其作用是单击它后,能在屏幕上显示一行字。编程步骤如下:
(1)建一个SDI单文档应用程序名为:显示一行字
(2)用编辑器设计菜单:
项目工作区ResourceView单击打开Menu 双击IDR_MAINFRAME右面出现菜单编辑器,见图2.1.1单击“文件(F)”出现下拉菜单,见图2.1.2所示点中最后的空白菜单,双击它出现“菜单项属性对话框”在Caption处写菜单名:显示一行字(&C)在ID处写ID_FILE_XS鼠标加速在prompt(注释)栏中写:点击新建菜单项,在窗口显示一行字关闭该对话框。
顶层菜单的空位置
子菜单的空位置
图2.1.1 菜单资源编辑器
窗口显示菜单
菜单标题
注释栏
菜单标识符
图2.1.2 菜单编辑器和修改菜单项属性的结果
(3)在文档的头文件CMyDoc.h的public下加:
CString str; //定义字符串变量
在文档的实现文件CMyDoc.cpp的构造函数里加:
str=” ”; //将字符串变量赋初值为”空”
(4)将菜单的标识ID_FILE_XS映射到视图类CMyView中。
View->Classvizard->Message Maps->Classname置CMyView->Object IDs选中ID_ FILE
_XS->选中COMMAND->单击Add Function->OK->Edit Code。在OnFileXS()映射函数中加代码:
void CMyView::OnFileXS()
{ CMyDoc *pDoc=GetDocument(); //获得文档类指针
ASSERT_VALID(pDoc); //检查pDoc指针是否有效
pDoc->str=“你成功的在File菜单下,建立了一个显示一行字菜单”;
Invalidate(); //去强制执行OnDraw()函数
}
(5)再在视图实现文件CMyView.cpp里的OnDraw(CDC *Pdc)函数里加代码:
CMyView::OnDraw(CDC *Pdc)
{ pDC->TextOut(100,100,pDoc->str); } //在窗口的x=100,y=100坐标处输出字符串
(6)编译运行
* 在出现的文档窗口上,单击菜单的“文件”->单击“显示一行字”菜单项,在屏幕上显示程序中写的一行字。
* 单击“文件(F)”,出现下拉采单,直接按C键,也出现这行字。
* 将鼠标放在“显示一行字”这个菜单上,下面状态栏会出现你在程序中写的注释:“点击新建菜单项,在窗口显示一行字”。
说 明:
1、TextOut(100,100,pDoc->str)是CDC类的输出函数,100,100是x,y坐标,pDoc->str是输出str内容。
2、改变菜单位置:鼠标左键选中该菜单不放,拖到你想要加的位置即可。
3、想在哪个位置加菜单:可选中后面的那个菜单,按联想下载Insert键即可。
4、“显示一行字(&C)”:其中“&”用于将其后面的字符作为该菜单项的助记符,也就是它后面的
字符成了快捷键字符。打开这个菜单,直接按这个助记符键,菜单命令就执行。
注 意:快捷键字符C不能与同一级快捷键字符重复,例如:若写“显示一行字 (&X)”则与下面的“退出(&X)”重复,系统无法判别是哪个X,则不能执行。
图2.1.2中的小对话框(Menu Item Properties)是双击“文件(F)”下的空白菜单出现的菜单属性对话框,我们用它建立了“显示一行字(&C)”菜单,菜单General属性的各项含义如表2.1所示。
例2.2 在顶层菜单栏里建立一个菜单项,并在其下面建立带有子菜单的菜单项,使有的子菜单具有加速键、变灰和核对符,又使每个子菜单都能显示信息。步骤如下:
(1)建一个单文档的应用程序(或用例2.1程序),名为:山东旅游
(2)建立菜单:
1)ResourceViewMenuIDR_MAINFRAME右面出现菜单编辑器左键选中顶层最后的空白菜单不放,将其拖到“帮助”的前面,松开鼠标(或选中“帮助”菜单,按Insert键)。双击这
个空白菜单,出现“菜单属性对话框”,在Caption处写:山东旅游(&S) Pop_up处于选中状态(屏蔽ID)退出。
2)双击下面出现的空白菜单,出现“菜单属性对话框”,选中Pop_up(屏蔽ID)Capton处写:烟台(&Y)
3)右边出现空白子菜单,双击它,出现“菜单属性对话框”ID处写:ID_SD_YT_PLCapton处写:蓬莱 Ctrl +F5 (注:Ctrl +F5是加速键标识)注释栏prompt处写:蓬莱仙境
4)双击“蓬莱”下面的子菜单,双击它,出现“菜单属性对话框”ID处写:ID_SD_YT_NSCapton处写:南山(&N)prompt处写:南山大佛
5)双击“烟台”下面的空白菜单, 出现“菜单属性对话框2012年2月思想汇报”选中Pop up(屏蔽ID)Capton处写:青岛(&Q)
6)右边出现空白子菜单,双击它,出现“菜单属性对话框” ID处写:ID_SD_QD_LSCapton处写:崂山 Ctrl +F6prompt处写:崂山道士
表2. 1 菜单General属性对话框的各项含义
项 目 含 义
ID 菜单的资源ID标识符
Caption(标题) 用于标识菜单项显示文本,助记符字母前面须有一个&符号,这个字
母与Alt构成组合键
Separator(分隔符) 选中时,菜单项是一个分隔符或一条水平线
Checked(选中的) 选中时,菜单项文本前显示一个选中标记
Pop_up(弹出) 选中时,菜单项含有一个弹出式子菜单
Grayed(变灰) 选中时,菜单项显示是灰的,用户不能选用
Inactive(非激活) 选中时,菜单项没有被激活,用户不能选用
Help(帮助) 选中时,菜单项在程序运行时被放在顶层菜单的最右端
Break(暂停) 当为Column时,对于顶层菜单项来说,被放置在另外一行上,而
对于弹出式子菜单的菜单项来说,则被放置在另外一列上,当为Bar
时,与Column相同,只不过对于弹出式子菜单来说,它还在新列
与原来的列之间增加一条竖直线,注意:这些效果只能在程序运行
后才能看到。
Prompt(提示) 用于指明光标移至该菜单项时,在状态栏上显示的提示信息
7)双击“青岛”下面的空白菜单, 出现“菜单属性对话框”选中Pop up(屏蔽ID)Capton处写:泰安(&T)
8)右边出现空白子菜单,双击它,出现“菜单属性对话框” ID处写:ID_SD_TA_TSCapton处写:泰山 Ctrl +F7prompt处写:泰山日出
9)双击“泰安”下面的空白菜单,出现“菜单属性对话框”选中Pop up(屏蔽ID)Capton处写:济南(&J)
10)右边出现空白子菜单,双击它,出现“菜单属性对话框” ID处写:ID_SD_JN_BTQ
Capton处写:趵突泉 Ctrl +F8prompt处写:天下第一泉
图2.1.3 加速键资源列表
(3)填加加速键表:
1)单击项目工作区的资源界面ResourceView一边是友情一边是爱情打开Accelerator双击IDR_MAINFRAME出现加速键表,双击最下面的空白格,见图2.1.3所示出现加速键属性对话框Accl Properties ID
处下拉到ID_SD_YT_PL置好key处下拉,到VK_F5置好(或置好ID后,单击[Next Key Typed],出现一个小对话框后,再按下Ctrl+F5键也可)见图2.1.4所示,这样就为“蓬莱”菜单置好了加速键。“加速键使命召唤4图文攻略General属性”对话框的各项含义如表2.2所示。
图2.1.4 “Accel Properties”(加速键属性)对话框
2)你再双击最下面的空白格,按上步的方法,分别将青岛崂山(ID_SD_QD_LS)、泰安泰山(ID_SD_TA_TS),济南趵突泉(ID_SD_JN_BTQ)菜单分别置好VK_F6 ,VK_F7,VK_F8的加速键。
注 意:图2.1.4中Modifiers处,选中Ctrl,说明是Ctrl键,选中Alt说明是Alt键,选中Shift说明是Shift键,小对话框“Press a key to be ysed as the accelerator”是单击“Next Key Typed
”弹出来的。
表2. 2 “加速键General属性”对话框的各项含义
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论