1、1第七章 自定义菜单作为应用程序最常用的功能组织形式,菜单设计在程序开发中是必不可少的。Visual FoxPro 支持两种类型的菜单:普通菜单和快捷菜单。普通菜单用来列出整个程序的各种功能,用户通过点击各个菜单项实现对相应程序功能的调用。普通菜单可以单独运行,也以可附着在表单窗口上成为 SDI(单文档界面)菜单。快捷菜单通常在单击鼠标右键时出现,它列出了与当前对象密切相关的操作选项,用户通过选择其中的菜单项快速完成相应的操作。创建菜单后将生成两种类型的文件:(1)菜单定义文件。该文件在编辑菜单项时产生,其文件扩展名为 .mnx;(2)菜单程序文件。该文件由菜单定义文件生成的可执行的菜单程序文
2、件,其文件扩展名 .mpr。7.1 菜单规划应用程序的实用性一定程度上取决于菜单系统的质量。在设计菜单系统时,必须考虑下列准则:(1)按照用户所要执行的任务组织系统,而不要按应用程序的层次组织系统。只要查看菜单和菜单项,用户就可对应用程序的组织方法有一个感性认识。因此,要设计好这些菜单和菜单项,必须了解用户思考问题和完成任务的方法。(2)合理排列菜单组和菜单项,给每个菜单组(项)定义一个有意义的菜单标题。按照菜单项的使用频率、逻辑顺序或字母顺序组织菜单组(项) 。当菜单项较多时,按字母顺序排列便于查看菜单项。(3)在菜单项的逻辑组之间放置分隔线,增强菜单项的可读性。(4)将每组菜单项的数目限制
3、在一个屏幕之内。如果菜单项的数目超过了一屏幕,则应为其中的一些菜单项创建子菜单。(5)为菜单和菜单项设置访问键或键盘快捷键。(6)使用能够准确描述菜单项的文字。描述菜单项时,应使用日常用语而非计算机术语。同时,说明选择一个菜单项产生的效果时,应使用简单、生动的动词,而不要将名词当作动词使用。另外,用相似语句结构来说明菜单项,保持风格的一致性。(7)在菜单项中混合使用大小写字母。只在特别强调时才使用大写字母。27.2 菜单设计器Visual FoxPro 系统提供了“菜单设计器”来创建、定制菜单系统,为用户提供了一个友好的人机交互界面。使用“菜单设计器”可方便地创建菜单、菜单项及其子菜单,并对菜
4、单项进行分组等。有三种方式可以打开“菜单设计器”对话框:(1)菜单方式。选菜单【文件(F) 】【新建(N) 】 ,在“新建”对话框中选 “菜单” ,再单击【新建文件(N)】按钮,如图 7-1 所示,此时将打开如图 7-2所示的“新建菜单”对话框。(2)项目管理器方式。在“项目管理器”的“其他”选项卡中选择“菜单”选项,再单击【新建】按钮,打开如图 7-2 所示的“新建菜单 ”对话框。(3)命令方式。在命令窗口中输入以下命令,打开如图 7-2 所示的“新建菜单 ”对话框。CREATE MENU 或MODIFY MENU MODIFY 命令中的 为菜单定义文件,其扩展名为 .mnx ,可以缺省。若
5、为新文件,则新建菜单文件,否则打开已经存在的菜单。在图 7-2 的对话框中根据实际需要选择 “菜单”或“快捷菜单” ,便可打开“菜单设计器” (这里选“菜单” ) ,如图 7-3 所示。由图 7-3 可见,菜单设计器的窗口组成如下:(1) “菜单名称”栏图 7-1 “新建”对话框图 7-2“新建菜单”对话框 图 7-3 菜单设计器3指定菜单项的名称,即程序运行时显示的菜单标题,并非内部名字。该栏左侧有一个“移动指示器” (Mover) ,用于改变当前菜单项在菜单列表中的位置。为方便操作,在使用菜单时,可以使用菜单项的访问键。设置菜单项访问键的方法是:在要作为访问键的字符前加上“图 7-16 生
6、成菜单图 7-17 菜单运行结果10按照用户的操作习惯,一般快捷菜单的调用方式都是采用单击鼠标右键的方法来实现,在程序设计过程中我们应该用 RightClick 事件来调用快捷菜单程序。例 7-2 创建快捷菜单 kj.mnx。为表单welcome.scx 添加快捷菜单,在程序运行时通过单击鼠标右键弹出的菜单项改变表单的背景色或标签文字的字体格式,效果如图 7-18 所示,菜单文件名为 “kj.mnx”。操作步骤如下:(1)打开“快捷菜单设计器” ,设计如图 7-19 所示的快捷菜单。(2)设计“背景颜色”和“文字修饰”菜单项。分别点击“背景颜色”和“文字修饰”菜单项右边的按钮【创建】进入下一级
7、菜单的编辑,具体设置如表 7-1 和表 7-2 所示:表 7-1“背景颜色”子菜单设置菜单名称 结果 选项 说明红色背景 命令 obj.backcolor=rgb(255,0,0) 设置红色背景蓝色背景 命令 obj.backcolor=rgb(0,0,255) 设置蓝色背景黄色背景 命令 obj.backcolor=rgb(255,255,128) 设置黄色背景- 子菜单 分隔线还原 命令 obj.backcolor=rgb(235,233,237) 还原背景颜色表 7-2“文字修饰”子菜单设置菜单名称 结果 选项 说明黑体 命令 obj.label1.fontname=“黑体“ 设置黑体格
8、式楷体 命令 obj.label1.fontname=“楷体_GB2312“ 设置楷体格式加粗 倾斜 过程 obj.label1.fontbold=.t.obj.label1.fontitalic=.t.设置加粗、倾斜- 子菜单 分隔线还原 过程 obj.label1.fontname=“宋体“obj.label1.fontbold=.f.还原文字格式图 7-19 设计快捷菜单图 7-18 快捷菜单11obj.label1.fontitalic=.f.(3)从【显示】菜单中选择【常规选项】命令,打开“常规选项”对话框窗口,在快捷菜单的“设置(S) ”代码窗口中添加命令如下:PARAMETERS
9、 obj在快捷菜单的“清理(C) ”代码窗口中添加菜单清除命令,以便在选择、执行菜单命令后能及时清除菜单,释放其所占用的内存空间,命令如下:Release popups kj(4)以“KJ.MNX ”为文件名保存菜单文件。(5)从 Visual FoxPro 系统菜单【菜单(M) 】中选择【生成(G)】 ,生成可执行的菜单程序文件“KJ.MPR ”。(6)打开表单 welcome.scx,在表单的 RightClick 事件中添加调用快捷菜单程序的代码,让程序运行时单击鼠标右键弹出设计的快捷菜单,代码如下:DO KJ. MPR &执行快捷菜单程序文件(7)保存、运行表单。运行结果如图 7-18
10、 所示,用户可以根据快捷菜单适当更改表单的背景颜色和文字格式。7.5 创建 SDI 菜单菜单除了单独运行外,也可附着在顶层表单窗口上成为 SDI 菜单。例 7-3 把学生管理系统的菜单系统 stu.mpr 以 SDI 菜单的形式显示在表单welcome.scx 上,效果如图 7-22 所示。菜单系统 stu.mpr 另存为 sdi-stu.mpr,表单welcome.scx 另存为 sdi-welcome.scx。操作步骤如下:(1)打开学生管理系统的菜单系统定义文件 stu.mnx,从 Visual FoxPro 系统菜单【文件(F ) 】中选择【另存为(A)】 ,以 sdi-stu.mnx
11、 为文件名另存到磁盘中。(2)选择 Visual FoxPro 系统菜单【显示( V)】中【常规选项(G)】菜单项,打开“常规选项”对话框,在该对话框中勾选“顶层表单”复选框。如图 7-20 所图 7-21 属性窗口图 7-20 常规选项12示。(3)保存菜单定义文件 sdi-stu.mnx,并生成可执行菜单程序文件 sdi-stu.mpr。(4)打开表单 welcome.scx,从 Visual FoxPro 系统菜单【文件(F) 】中选择【另存为(A)】 ,以 sdi-welcome.scx 为文件名另存到磁盘中。(5)在属性窗口中设置 ShowWindow 属性为“2- 作为顶层表单 ”
12、,使其成为顶层表单,如图 7-21 所示。(6)添加调用菜单代码。双击表单,在表单的 Init 事件中添加如下代码:DO sdi-stu.mpr WITH THIS, .t. &调用菜单,并指定菜单的内部名(7)添加清除菜单的代码。在表单的 Destroy 事件中加入清除菜单的命令,使表单关闭时同时从内存中清除菜单,释放其所占用的内存空间。代码如下:Release Menu sdi EXTENDED &清除菜单,释放内存空间(8)保存、运行表单。运行效果如图 7-22 所示。7.6 本章习题一简答题 1菜单和工具栏各有什么作用?各由什么 组成? 2什么是下拉菜单和快捷菜单 ?各有什么别名? 3
13、创建菜单要经过那些步骤? 4创建工具栏要经过那些步骤 ? 5如何快速创建菜单? 6设计菜单的基本原则有哪些? 7如何组织菜单系统? 8在 VFP 菜单栏上,何时出现 与消失“菜单”项? 图 7-22 顶层表单上的 SDI 菜单13二填空题 1通常,用户界面可以是 ,也可以是 。 2菜单文件的扩展名是 ,菜 单程序的扩展名是 。 3菜单是供用户选择程序的功能或命令的 。 4菜单栏显示 菜单,下拉式菜单显示 菜单。 5快捷菜单是在 时弹出的菜单。 6 可包括主菜单、子菜单、快捷菜单及其所生成的程序。 7可设置工具栏 对应于菜 单中频繁使用的 。 8在 VFP 菜单栏上,在 时出现与消失“菜单”项。
14、 三选择题 1菜单是( )结构的用户界面。 A逻辑 B层次 C顺序 D无 2菜单初始化设置代码是在( )执行的语句序列。 A.显菜单之前 B主程序之前 C建菜单之前 D安装时 3菜单清理代码是在( )执 行的语句序列。 A.显菜单之后 B主程序之前 C建菜单之前 D安装后 4在创建或编辑了菜单之后,应在关闭( ) 之前单击“菜单”|“生成。 A数据库 B表 C菜单设计器 D过程窗口 5可用( )存放每个菜单项 的可/ 不可选状态。 A菜单 B数组 C按钮 D工具栏。 6自定义工具栏类派生于( )基类。 Aquery Bform Ctoolbar Dclass 7. 在创建自定义工具栏类之后,可
15、添加 A按钮 B对象 C菜单 D属性 8若设置工具栏按钮的( )属性, 则可以给按钮添加位 图或图标。 Acaption Bpicture Cbmp Dimage 9. 下面关于工具栏的叙述, 错误的是A. 可以创建用户自己的工具 栏 B. 可以修改系统提供的工具栏C. 可以删除用户创建的工具 栏 D. 可以删除系统提供的工具栏10. 控制命令窗口显示和隐藏的命令在( )菜单项中。A. “编辑“ B. “工具“ C. “窗口“ D. “项目“11. 假设已经生成了名为 mymenu 的菜单文件, 执行该菜 单文件的命令是A.DO mymenu B.DO mymenu.mpr C.DO mymenu.pjx D.DO mymenu.mnx12. 在菜单设计器中,在菜单项 中加入一条分隔线的方法是将菜 单名称设为A. C. - D. -14四判断改错题 1菜单的分隔线可用以划分主菜 单和子菜单。 ( ) 2子菜单中还可以含有快捷菜 单。 ( ) 3菜单项的任务可用相应命令或 过程实现。 ( ) 4表单仅用以显示工具栏。 ( ) 5在顶层表单中可以显示工具 栏。 ( ) 6在菜单中可以显示工具栏。 ( )