在开发软件的菜单界面时,能按Windows所设定的规范进行,不仅能使所开
发出的应用软件的菜单界面更美观丰富,而且能与Windows中各软件协调一致,
使大量熟悉Windows操作的用户,一看菜单,就能根据平时的使用经验,触类旁通
地知晓该应用软件的各功能和简捷的操作方法,增强软件的灵活性和可操作
性。
以下以VB5.0的工具菜单栏(Tools)中的“菜单编辑器”和一个“学生档
案管理软件”(主要有“文件”、“系统初始化” 、“年级”、“输入与查
询”等菜单,分别完成报表打印、新建年级库、选年级、以及数据库数据的输
入与查询等)为例,说明Windows应用软件菜单设计的一些规则:
一、暂时不可操作的菜单命令项一般要屏蔽变灰
Windows菜单中有一些菜单项是以变灰的形式出现的,并用虚线字符来显
示,这一类的命令表示当前不可用,也就是说,执行此命令的条件当前还不具
备。例如,在学生档案管理软件中,初始的“输入与查询”菜单为灰,因为在
没有选中“年级”的情况下,系统将不知要查询哪个年级的学生资料。在图1
中设计时,点击“输入与查询”菜单条的“有效(E)”属性,改变其默认的
“有效”为“无效”,然后设计在“年级”菜单中各年级的Click事件中传递
所选中的年级信息给“输入与查询”模块后改变后者的“有效”属性值,让其
可操作:
Private Sub mnu98dz_Click()
Transfer = "c:\dagl\98dz.mdb"
mnuFind.Enabled = True
End Sub
二、正在起作用的菜单命令旁打上选中标记(√)
Windows中有一些命令是触发式的,打勾号表明该命令正在起作用,否则
表明不起作用,可通过点击,反复切换。例如,在上述所举的学生档案管理软
件中,当选择了某一年级时,系统就在对应年级菜单前打上“√”,表明正在
操作的是此年级的数据库。要做到这一点,只要把菜单编辑器中相应菜单条的
“复选(C)"框选中即可,然后在菜单的驱动事件加入如下语句来切换该属性:
mnu98dz.Checked=not mnu98dz.Checked
三、为命令选项设置访问键(Access key)
菜单项中带有下划线的字母,称为该命令的访问键,是为了方便使用键盘
的用户而设置的,按Alt键和该字母时即可打开该菜单,增加访问键只要在菜
单编辑器的“标题(P)”框中,在要让其成为访问键的字母前加“&”即可,
当然,访问键最好不要重复,否则系统只认定第一个有效。
四、为命令选项增加快捷键(Shortcut Key)
某些菜单命令的右边有一组合键,称为该命令的快捷键,可以不打开菜单
而直接按快捷键来选择执行此命令。为一个命令项增加一个快捷键,可在菜单
编辑器中的“快捷键(S)”列表框中为该命令项分配一个,列表中一个快捷
键只能被分配一次,否则系统会拒绝接受。
五、在要弹出对话框的命令选项后增加省略号(...)提示用户
Windows中,如果命令项后面有省略号(...),表明选择此命令将引出一
个对话框,从对话框系统要求用户提供更多执行该命令所需的信息,在设计时
只要在会引出对话框的菜单项的标题后增加“(...)"提示即可。
六、用右指向的箭头(→),来指引用户选择此项将引出级联菜单
(Cascading Menu)
级联菜单即所谓的子菜单,在VB中箭头由系统根据菜单编辑器中设计菜单
大纲时所安排的“缩进”度而自动实现的,因此,关键是在设计菜单时合理安
排大纲中各菜单项上下级的逻辑关系,在VB中最多 可以有四级子菜单。
七、对相关的命令用分隔条(Separate Bar)进行分组
为了让用户迅速地在菜单中找到他要执行的命令项,有必要对菜单中相关
的一组命令用分隔条进行 分组,如文件菜单中,把有关打印输出的一组
命令:“页面设置”、“打印预览”、“打印”等用分隔条醒目地进行分隔。
这只要在需要进行分组的命令之间插入一个特殊的命令条,该命令条的“标
题”为“-”,而“名称”任意,因为在程序中一般不会引用此命令的名称。
八、建立动态菜单,提高软件的灵活性
动态菜单即运行时会伸缩的菜单,Windows中有许多软件的“文件”菜单
中都具有记忆最近操作过的几个文档名的功能,在本文所举例的学生档案管理
软件中,因为每年都会有新的学生到校,在形成新的年级时,要在“年级”菜
单中动态地增加新的年级名称以供选择和查询,这首先要在设计时生成菜单命
令的控件数组(Menu Control Array),在菜单的编辑器中加入一个菜单选项,
设其Index属性设置为0,然后可以加入名称相同(在本例中名称为MnuNj),
Index值相邻递增的菜单选项(比如加入10个),设计时让它们标题框均为空留
作日后引用新年级名,并设这些备用菜单条的“可见”属性为无效4目前不可
见。在有建立和删年级库功能的“系统初始化”菜单驱动事件中引
用这个数组名和索引值在“输入与查询”中动态地加进新的年级名选项,并且
让可见或不可见(在删除时):
Private AddMenu_Click()
Counter=counter+1
Nj=Nj+1 'Nj是一个模块级变量,初值为1998
MnuNj(counter).Caption= Nj & "年级"
MnuNj(counter).Visible=Ture
End Sub
Windows中许多应用程序的“文件"菜单记住最近使使过的文件名的实际方
法与此类似。
九、生成弹出式菜单,增强软件的可操作性
有时为了方便用户需要,为一些最常用的命令建立右键弹出式快捷菜单,
这种菜单的前期设计和普 通菜单一样,不同的是一般要先点击“可见
(P)”框,让此菜单不可见,然后在窗体的MouseDown或 MouseUp事件中引
用PopupMenu方法来实现在窗体上按下鼠标右键时弹出此菜单:
Private Sub MdiForm1_MouseDown(Button As Integer, Shift As
Integer, X As Single, Y As Single)
If button=2 the Popupmenu MnuEdit
'MnuEdit为制作的要弹出的菜单
End Sub
PopupMenu方法将忽略初始设置的“不可见”属性。
使用Windows下的其他软件开发工具设计菜单时,情形与之类似。