2023年11月28日发(作者:)

第七章 自定义菜单

作为应用程序最常用的功能组织形式,菜单设计在程序开发中是必不可少的。

Visual FoxPro 支持两种类型的菜单:普通菜单和快捷菜单。普通菜单用来列出整个

程序的各种功能,用户通过点击各个菜单项实现对相应程序功能的调用。普通菜单

可以单独运行,也以可附着在表单窗口上成为SDI(单文档界面)菜单。快捷菜单

通常在单击鼠标右键时出现,它列出了与当前对象密切相关的操作选项,用户通过

选择其中的菜单项快速完成相应的操作。

创建菜单后将生成两种类型的文件:

1)菜单定义文件。该文件在编辑菜单项时产生,其文件扩展名为 .mnx

2)菜单程序文件。该文件由菜单定义文件生成的可执行的菜单程序文件,其

文件扩展名 .mpr

7.1 菜单规划

应用程序的实用性一定程度上取决于菜单系统的质量。

在设计菜单系统时,必须考虑下列准则:

1)按照用户所要执行的任务组织系统,而不要按应用程序的层次组织系统。

只要查看菜单和菜单项,用户就可对应用程序的组织方法有一个感性认识。因

此,要设计好这些菜单和菜单项,必须了解用户思考问题和完成任务的方法。

2)合理排列菜单组和菜单项,给每个菜单组(项)定义一个有意义的菜单标

题。

按照菜单项的使用频率、逻辑顺序或字母顺序组织菜单组(项)。当菜单项较多

时,按字母顺序排列便于查看菜单项。

3)在菜单项的逻辑组之间放置分隔线,增强菜单项的可读性。

4)将每组菜单项的数目限制在一个屏幕之内。

如果菜单项的数目超过了一屏幕,则应为其中的一些菜单项创建子菜单。

5)为菜单和菜单项设置访问键或键盘快捷键。

6)使用能够准确描述菜单项的文字。

描述菜单项时,应使用日常用语而非计算机术语。同时,说明选择一个菜单项

产生的效果时,应使用简单、生动的动词,而不要将名词当作动词使用。另外,用

相似语句结构来说明菜单项,保持风格的一致性。

7)在菜单项中混合使用大小写字母。只在特别强调时才使用大写字母。

1

7.2 菜单设计器

Visual FoxPro系统提供了“菜单设计器”来创建、定制菜单系统,为用户提供

了一个友好的人机交互界面。使用“菜单设计器”可方便地创建菜单、菜单项及其

子菜单,并对菜单项进行分组等。

有三种方式可以打开“菜单设计器”对话框:

1菜单方式。选菜单【文件F【新建N

在“新建”对话框中选“菜单”,再单击【新建文件(N)

按钮,如图7-1所示,此时将打开如图7-2所示的“新

建菜单”对话框。

2项目管理器方式。“项目管理器”“其他”

选项卡中选择“菜单”选项,再单击【新建】按钮,打

开如图7-2所示的“新建菜单”对话框。

3命令方式。在命令窗口中输入以下命令,打开

如图7-2所示的“新建菜单”对话框。

CREATE MENU

MODIFY MENU <文件名>

MODIFY命令中的<文件名>为菜单定义文件,其扩

展名为 .mnx ,可以缺省。若<文件名>为新文件,则新

7-1 “新建”对话框

建菜单文件,否则打开已经存在的菜单。

在图7-2的对话框中根据实际需要选择“菜单”或“快捷菜单”,便可打开“菜

单设计器”(这里选“菜单”,如图7-3所示。

7-2“新建菜单”对话框

7-3 菜单设计器

由图7-3可见,菜单设计器的窗口组成如下:

1“菜单名称”栏

指定菜单项的名称,即程序运行时显示的菜单标题,并非内部名字。该栏左侧

有一个“移动指示器”Mover,用于改变当前菜单项在菜单列表中的位置。

2

为方便操作,在使用菜单时,可以使用菜单项的访问键。设置菜单项访问键的

方法是:

在要作为访问键的字符前加上“<”字符窜。如在“菜单名称”栏中输入菜单

项名称为“数据浏览(,那么字母B就是该菜单项的访问键,菜单运行时,按

Alt+B便可选定该菜单项。

为增强可读性,可使用分隔线将内容相关、功能相近的菜单项分隔成组。例如,

7-4Visual FoxPro “编辑”菜单,“撤消”“重做”分为一组,“剪切”“复

制”“粘贴”“选择性粘贴”和“清除”分为一组,Visual FoxPro系统在两组菜单

项之间插入一条水平的分隔线。

要对菜单项进行分组,操作方法是:

在“菜单名称”栏中,键入“-,便可

以创建一条分隔线。拖动“-”提示符

左侧的按钮,可将分隔线移动到所需的

位置。

2“结果”栏

该栏用于指定当该菜单项被选中时

产生的动作。它有4个选项,包括:

子菜单(Submenu:选择此选

项,表示该菜单项包含一个子菜单,当

菜单运行时,若用户选取该菜单项将弹

出它的子菜单。选择此项后,结果列右

7-4 菜单项分组结果

侧将出现一【编辑】按钮,单击此按钮

将进入下一级菜单设计窗口。

命令(Command:选择此选项,列表框的右侧将出现一个输入框,用于输

入一条具体的命令。当用户选择该菜单项时,

行该命令。

过程Procedure用于定义一个与菜单

项相关联的过程,当用户激活该菜单项时将执行

此过程代码。选择此项时,其右侧将出现一个【创

建】按钮,单击此按钮将启动过程编辑窗口,

于输入和编辑过程代码。若过程代码已经存在,

则列表框右侧出现的将是【编辑】按钮,而不是

【创建】按钮。

填充名称(Pad Name:选择此选项,

列表框的右侧将出现一个输入框,用于输入自定

义的菜单项内部名字,此名字的命名规则与

Visual FoxPro中变量的命名规则相同。

7-5 “提示选项”对话框

3“选项”栏

3

单击该栏按钮将弹出“提示选项”对话框,如图7-5所示。该对话框用于设置

菜单项的各种高级属性,如快捷方式、菜单项说明信息等。当在对话框中定义了菜

单项的属性后,按钮上就出现符号“√”

4“菜单级”栏:显示当前菜单项所处的菜单级别,提供用户选择所要处理

的菜单或子菜单。

5“预览”按钮:预览正在设计的菜单,可检查菜单的层次关系及提示等是

否正确。

6“插入”按钮:在当前菜单项的前面插入一个新的菜单项。

7“删除”按钮:删除当前的菜单项。

7.3 创建普通菜单

Visual FoxPro的菜单有两种:普通菜单和快捷菜单。两种菜单的创建过程非常

相似,基本步骤为:

1)规划好菜单系统之后,使用以上介绍的办法打开菜单设计器;

2 在菜单设计器中创建、编辑各菜单项,生成菜单定义文件(扩展名

.MNX

3)选菜单【菜单(M】→【生成(G...】生成菜单的可执行文件(扩展名

.MPR

4)运行菜单程序。

菜单的新建有两种选择模式:

使用“快速菜单”从已有的 Visual FoxPro 菜单系统定制;

自定义菜单系统。

7.3.1 利用“快速菜单”创建菜单

利用“快速菜单”创建菜单系统的操作步骤如下:

1)打开菜单设计器。

2)从【菜单(M】菜单中,选择【快速菜单(Q】命令。

3通过添加或更改菜单项定制菜单系统。拖动移动指示器可以改变菜单栏上

各菜单项的位置。

快速菜单的界面如图7-6所示。点击【编辑】按钮可编辑相应的子菜单项,如

7-7所示,单击选项按钮则打开相应的“提示选项”对话框,如图7-8

4

7-6 “快速菜单”界面

7-7 子菜单项

7-8 “提示选项”对话框

7.2.2创建自定义菜单系统

“快速菜单”的创建虽然简单快捷,但它是在Visual FoxPro系统菜单的基础上

5

7-9 “插入系统菜单栏”窗口

进行增删的,其功能往往不符合我们的实际需求。自定义菜单是用户根据系统的需

要在空白的菜单设计器上自行设计的下拉菜单。自定义菜单的“结果”项除从菜单

设计器提供的4个选项子菜单、命令、填充名称、过程进行选择外,还可以利用菜

单设计器上提供的【插入栏】按钮打开“插入系统菜单栏”对话框窗口,从中选择

Visual FoxPro系统内置的菜单项,如图7-9所示。

7-1 设计学生管理系统的菜单系统,其主菜单包括“文件”“编辑”“数据

查询”“数据浏览”“数据维护”“打印”“退出”等菜单项,保存的文件名

为“

操作步骤如下:

1)利用7.2节介绍的三种办法中的任意一种新建一菜单文件,打开如图7-3

7-10 STU主菜单

所示的“菜单设计器”窗口。

2)在“菜单名称”中输入本例中的菜单项名称,如图7-10所示。

3)设计“文件(F”和“编辑(E”菜单。

6

在“菜单设计器”的菜单名称中输入“文件(”和“编辑(”两个

菜单项后,分别单击“子菜单”项旁边的【创建】按钮,进入下一级子菜单的设计;

单击“菜单设计器”上的“插入栏(B”按钮,打开如图7-9所示的【插

入系统菜单栏】对话框,为“文件(”菜单添加“关闭”“保存”和“另存为”

菜单项;

仿照②的操作,为“编辑(”菜单添加“撤销”“重做”“还原”“剪

切”“复制”“粘贴”菜单项,并创建分隔线。

效果如图7-117-12所示。

7-11 “文件”项子菜单

7-12 “编辑”项子菜单

4)设计“数据查询”菜单项。单击“子菜单”项右边的【创建】按钮,进入

下一级子菜单的设计。为“数据查询”项添加三个子菜单项,用于实现“查询学生

档案”“查询学生成绩”“查询选课情况”的功能,效果如图7-13所示。

7-13 数据查询子菜单

7

各菜单项的命令代码如下:

do form && 打开档案查询表单

do form && 打开成绩查询表单

do form && 打开选课查询表单

5)设计“数据浏览”菜单项。单击“子菜单”项旁边的“创建”按钮,进入

下一级子菜单的设计。“数据浏览”项包括“学生档案”“学生成绩”“选课情况”

三个子菜单项,效果如图7-14所示。各菜单项的命令代码如下:

do form && 打开档案浏览表单

do form && 打开选课浏览表单

“学生成绩”菜单项结果采用“过程”,其具体代码如下:

USE && 打开学生成绩表

brow && 浏览学生成绩表

7-14 数据浏览子菜单

6)设计“退出”菜单项的子菜单项。“退出”菜单有“还原系统菜单”和“退

出系统”两个子菜单,分别用相应的命令完成,具体代码如下:

set sysmenu to default && 返回系统菜单

do form && 打开退出表单

7-15 退出子菜单

7)保存菜单文件。从Visual FoxPro系统菜单【文件(F】中选择【保存(S

或按Ctrl+W组合键,打开“另存为”对话框窗口,输入“STU”文件名后保存菜单

文件。

注意:此处保存的文件类型为菜单定义文件,其扩展名为“.MNX,本例菜单

文件完整的名称为“

8)生成可执行的菜单程序文件。完成菜单定义文件保存后,从Visual FoxPro

系统菜单【菜单M中选择【生成G生成可执行的菜单程序文件

如图7-16所示。

9)运行菜单程序。在Visual FoxPro命令窗口中输入以下命令运行菜单程序:

8

Do D:

&& 运行菜单程序

菜单运行结果如图7-17所示。

7-16 生成菜单

7-17 菜单运行结果

在实际应用中,程序设计总是在使用过程中不断调试、不断改进才达到最佳效

果。如果要修改以上的菜单文件,可重复以上的设计步骤,并重新保存,重新生成,

重新应用。

7.4 创建快捷菜单

快捷菜单是应用程序中常用的操作方式,把与当前操作对象密切相关的命令用

菜单的方式组织起来,用户在使用时只需点击鼠标右键,从列举的菜单项中直接选

取就可以完成相应的操作,给程序操作提供了极大的方便。

利用Visual FoxPro 系统提供的快捷菜单设计器可以很方便地定义和设计快捷

菜单。快捷菜单的设计方法和过程与设计普通菜单类似,具体步骤为:

1)打开快捷菜单设计器。在图7-2“新建菜单”对话框中选择【快捷菜单】

按钮,便可打开快捷菜单设计器。

2定义菜单项。根据设计要求按照上面普通菜单的定义和编辑方法进行各菜

单项的设计,保存生成扩展名为.MNX的菜单定义文件。

3)生成可执行的菜单程序文件。从Visual FoxPro系统菜单【菜单(M】中

选择【生成(G),生成可执行的菜单程序文件,其扩展名为.MPR

4)运行菜单程序。快捷菜单的运行方法与普通菜单一样,采用下面命令执行

菜单程序:

DO <菜单文件名.mpr >

按照用户的操作习惯,一般快捷菜单的调用方式都是采用单击鼠标右键的方法

9

来实现,在程序设计过程中我们应该用RightClick事件来调用快捷菜单程序。

7-2创建快捷菜单。为表单

添加快捷菜单,在程序运行时

通过单击鼠标右键弹出的菜单项改变表单

的背景色或标签文字的字体格式,效果如

7-18所示,菜单文件名为“

操作步骤如下:

1)打开“快捷菜单设计器”,设计

如图7-19所示的快捷菜单。

2设计“背景颜色”“文字修饰”

7-18 快捷菜

菜单项。分别点击“背景颜色”和“文字

修饰”菜单项右边的按钮【创建】进入下一级菜单的编辑,具体设置如表7-1和表

7-2所示:

7-19 设计快捷菜单

7-1“背景颜色”子菜单设置

菜单名称 结果 选项 说明

红色背景 命令 lor=rgb(255,0,0) 设置红色背景

蓝色背景 命令 lor=rgb(0,0,255) 设置蓝色背景

黄色背景 命令 lor=rgb(255,255,128) 设置黄色背景

- 子菜单 分隔线

还原 命令 lor=rgb(235,233,237) 还原背景颜色

7-2“文字修饰”子菜单设置

菜单名称 结果 选项 说明

黑体 命令 me="黑体" 设置黑体格式

楷体 命令 me="楷体_GB2312" 设置楷体格式

加粗 倾斜 过程 ld=.t. 设置加粗、倾斜

- 子菜单 分隔线

还原 过程 me="宋体" 还原文字格式

alic=.t.

ld=.f.

alic=.f.

10

3)从【显示】菜单中选择【常规选项】命令,打开“常规选项”对话框窗口,

在快捷菜单的“设置(S”代码窗口中添加命令如下:

PARAMETERS obj

在快捷菜单的“清理(C”代码窗口中添加菜单清除命令,以便在选择、执行

菜单命令后能及时清除菜单,释放其所占用的内存空间,命令如下:

Release popups kj

4)以“”为文件名保存菜单文件。

5)从Visual FoxPro系统菜单【菜单(M】中选择【生成(G,生成可

执行的菜单程序文件“

6)打开表单,在表单的RightClick事件中添加调用快捷菜单程

序的代码,让程序运行时单击鼠标右键弹出设计的快捷菜单,代码如下:

DO KJ. MPR &&执行快捷菜单程序文件

7)保存、运行表单。运行结果如图7-18所示,用户可以根据快捷菜单适当

更改表单的背景颜色和文字格式。

7.5 创建SDI菜单

菜单除了单独运行外,也可附着在顶层表单窗口上成为SDI菜单。

7-3 把学生管理系统的菜单系统 SDI菜单的形式显示在表单

上,效果如图7-22所示。菜单系统另存为,表单

另存为

操作步骤如下:

1)打开学生管理系统的菜单系统定义文件,从Visual FoxPro系统菜

单【文件(F】中选择【另存为(A,以为文件名另存到磁盘中。

2)选择Visual FoxPro系统菜单【显示(V)】中【常规选项(G)】菜单项,打

开“常规选项”对话框,在该对话框中勾选“顶层表单”复选框。如图7-20所示。

7-20 常规选项

7-21 属性窗口

11

3)保存菜单定义文件,并生成可执行菜单程序文件

4打开表单Visual FoxPro系统菜单【文件F中选择【另

存为(A,以为文件名另存到磁盘中。

5)在属性窗口中设置ShowWindow属性为“2-作为顶层表单”,使其成为顶

层表单,如图7-21所示。

6)添加调用菜单代码。双击表单,在表单的Init事件中添加如下代码:

DO WITH THIS, .t. &&调用菜单,并指定菜单的内部名

7)添加清除菜单的代码。在表单的Destroy事件中加入清除菜单的命令,使

表单关闭时同时从内存中清除菜单,释放其所占用的内存空间。代码如下:

Release Menu sdi EXTENDED

&&清除菜单,释放内存空间

8)保存、运行表单。运行效果如图7-22所示。

7-22 顶层表单上的SDI菜单

7.6 本章习题

一.简答题

1.菜单和工具栏各有什么作用?各由什么组成?

2.什么是下拉菜单和快捷菜单?各有什么别名?

3.创建菜单要经过那些步骤?

4.创建工具栏要经过那些步骤?

5.如何快速创建菜单?

6.设计菜单的基本原则有哪些?

7.如何组织菜单系统?

8.在VFP菜单栏上,何时出现与消失“菜单”项?

二.填空题

12

1.通常,用户界面可以是 ,也可以是

2.菜单文件的扩展名是 ,菜单程序的扩展名是

3.菜单是供用户选择程序的功能或命令的

4.菜单栏显示 菜单,下拉式菜单显示 菜单。

5.快捷菜单是在 时弹出的菜单。

6 可包括主菜单、子菜单、快捷菜单及其所生成的程序。

7.可设置工具栏对应于菜单中频繁使用的

8.在VFP菜单栏上,在 时出现与消失“菜单”项。

三.选择题

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. 在创建自定义工具栏类之后,可添加

A.按钮 B.对象 C.菜单 D.属性

8.若设置工具栏按钮的( )属性,则可以给按钮添加位图或图标。

Acaption Bpicture Cbmp Dimage

9. 下面关于工具栏的叙述,错误的是

A. 可以创建用户自己的工具栏 B. 可以修改系统提供的工具栏

C. 可以删除用户创建的工具栏 D. 可以删除系统提供的工具栏

10. 控制命令窗口显示和隐藏的命令在( )菜单项中。

A. "编辑" B. "工具" C. "窗口" D. "项目"

11. 假设已经生成了名为 mymenu 的菜单文件,执行该菜单文件的命令是

mymenu

12. 在菜单设计器中,在菜单项中加入一条分隔线的方法是将菜单名称设为

A. < B. > C. <- D. -

四.判断改错题

1.菜单的分隔线可用以划分主菜单和子菜单。

13

2.子菜单中还可以含有快捷菜单。

3.菜单项的任务可用相应命令或过程实现。

4.表单仅用以显示工具栏。

5.在顶层表单中可以显示工具栏。

6.在菜单中可以显示工具栏。

14