250 likes | 443 Views
第 10 章 菜单. 10.1 创建菜单 10.2 菜单属性 10.3 菜单事件 10.4 弹出式菜单 10.5 菜单的函数 10.6 菜单与窗口的关联 10.7 菜单编程实例. 菜单栏. 菜单标题. 分割线. 菜单项. 快捷键. 加速键(带下划线的字母). 省略号表示打开对话框. 图 10-1 有关菜单的名词. 10.1.1 菜单术语. 有关菜单的基本术语参见图 10-1 的说明和表 10-1 的解释。. 10.1.2 菜单的设计原则. 在菜单设计时,可以参考以下设计原则:
E N D
第10章菜单 10.1 创建菜单 10.2 菜单属性 10.3 菜单事件 10.4 弹出式菜单 10.5 菜单的函数 10.6 菜单与窗口的关联 10.7 菜单编程实例
菜单栏 菜单标题 分割线 菜单项 快捷键 加速键(带下划线的字母) 省略号表示打开对话框 图10-1 有关菜单的名词 10.1.1 菜单术语 有关菜单的基本术语参见图10-1的说明和表10-1的解释。
10.1.2 菜单的设计原则 在菜单设计时,可以参考以下设计原则: (1)菜单的整体要有统筹规划,使其划分合理、条理清晰、简明直观、方便易用。基本做到能够根据前级菜单项,知道下级菜单包含内容的范围;根据用户的功能要求,知道应该从哪一个菜单标题以及菜单项去操作。 (2)菜单标题和菜单项的名称设计应当简明扼要,具有概括性和直观性。 (3)采用加速键和快捷键,起到快速和没有鼠标只用键盘也能操作菜单的双重效果。 (4)如果某菜单项将打开一个对话框,则在该菜单项的标题中要使用省略号进行提示。 (5)某一菜单项或整个菜单标题下的菜单项不能使用或禁止使用时,应当使其变灰(禁止使用)。 (6)级联菜单的层数不宜太多,菜单栏以及下拉菜单不要超出屏幕范围,否则无法操作。 (7)采用状态栏对菜单的使用提供帮助和提示信息,对菜单项的功能进行详细的说明。
菜单有三种类型:下拉菜单、弹出式菜单和级联菜单。下拉菜单如图10-2所示,它有菜单标题、菜单项组成。菜单有三种类型:下拉菜单、弹出式菜单和级联菜单。下拉菜单如图10-2所示,它有菜单标题、菜单项组成。 弹出式菜单与对象相关联,通常又称为上下文相关菜单。图10-3是个弹出式菜单的示例。一般来说,当用户右击某个对象时,出现弹出式菜单。 图10-3 弹出式菜单示例 图10-2 下拉菜单 10.1.3 菜单的种类
图10-4 级联菜单 10.1.3 菜单的种类 级联菜单可以出现在下拉菜单、弹出式菜单中,在其父菜单项后面有个向右箭头符号,指示该菜单项后面有级联菜单。一般来说,级联菜单的层次不宜超过两层。
所见即所得子窗口 菜单树子窗口 属性卡 事件列表区 函数列表区 脚本区 结构列表区 结构定义区 图10-5 菜单画板子窗口的选择 10.1.4 菜单画板 PB提供了高度集成和功能丰富的菜单画板,它拥有八个不同功能的窗口区域,通过系统菜单标题“View”下的八个菜单项可以选择打开相应的功能子窗口。
WYSIWYG子窗口 (所见即所得窗口) 属性区 脚本/事件列表/函数列表区 菜单树子窗口 图10-6 菜单画板 10.1.4 菜单画板 图10-6为菜单画板的外貌之一。
1、单击New按钮弹出New对话框 2、选择PB Object 3、双击Menu 图10-7 创建菜单对象 10.1.5 创建菜单对象 创建菜单的具体步骤: (1)击工具栏NewObjectMenu,双击之,产生了新的菜单对象。
(2)菜单根项Untitled0击右键“Insert SubMenu Item” 见图,在Untitled0下出现一个可编辑的空白框,在此框或在属性卡 的“Text”栏中输入需要的菜单标题,在所见即所得子窗口中可以见到新加入的菜单标题。 (3)该菜单标题上右击,出现与前面相同的弹出式菜单,此时菜单的所有 功能都可以使用。如果要在其 上方产生一个同级的菜单,击“Insert Menu Item”菜;如果要在其下方产生一个同级的菜单,击“Insert Menu Item At End” ;如果要添加一个子菜单项,击“Insert SubMenu Item” ;如果要复制一个菜单项,击“Duplicate” ;要删除一个菜单项,击“Delete” 。需要分栏效果,在菜单的文本框中输入“-”。按照这种方法 反复使用,最后得到一个完整的树状菜单。 1.在Untitled0上 单击右键,出 现弹出菜单 菜单树子窗口 2.单击插入子菜单项 图10-8 生成菜单项 10.1.5 创建菜单对象
输入菜单标题 图10-9 输入菜单标题 10.1.5 创建菜单对象
10.1.5 创建菜单对象 (4)为菜单项编写程序脚本。一般,在菜单树的最后一级编写脚本,可以采用下面四种方法之一选择某一菜单项的脚本区: l在菜单树子窗口双击某菜单项; l在所见即所得子窗口双击某菜单项; l在某菜单项上单击右键,选择弹出菜单上的“Script”菜单项; l直接在脚本编辑子窗口左上方的下拉列表框中选择需要编辑脚本的菜单项名称。在选择了菜单项后,还要在脚本编辑子窗口上方的下拉列表框中选择需要编辑脚本的事件。然后,完成脚本的编写。 (5)保存菜单对象。为新菜单对象起名,并可以在“Comment”编辑框中加入注释。为了保险起见,保存工作可以在前面进行,并且可以进行多次。
菜单项名称 锁定菜单 项名称 菜单项显示文本 微帮助文本 加选中标记 设置缺省菜单项, 菜单标题加粗 使继承菜单可以 插入新菜单项 对OLE菜单的 合并方式 菜单项类型 定义快捷键 图10-10 菜单的General属性页 10.2 菜单属性 菜单有两个属性页,分别为“General”属性页和“ToolBar”属性页。其中,“General”属性页见图10-10。
10.2 菜单属性 当输入了一个菜单标题或菜单项文本后,会自动在“Name”属性前加上前缀“m_”,生成菜单项名称。如有重复的名称发生,系统会弹出对话框,并推荐一个新的名称。当“Lock Name”复选框被选中后,菜单项名称就被锁定。 用户修改菜单项的文本时,菜单项名称不会随之改变。如果应用程序中包含OLE控件时,需要考虑“MergeOption”属性。该属性定义了OLE服务程序的菜单与用户应用程序的菜单合并的方式。
工具栏按钮 下显示的文本 选择按钮 的图标 工具栏按 钮可见 选择按钮被 按下的图标 使用“按下” 状态,不选为 “弹起”状态 按钮之间 的空隙 按钮排列顺 序,0为按菜 单项的顺序 多行工具栏 时按钮属于 哪一行 选择按钮 类型 图10-11 菜单ToolBar属性页 10.2 菜单属性 “General”属性页的下部是定义快捷键的选择控件,“Shortcut Key”下拉列表框中选择主键名,下面三个复选框用来选择“Alt”、“Ctrl”和“Shift”组合键。定义组合键时要注意,一般不要采用单个主键作为快捷键;另外,尽量避开系统的常用快捷键。 “ToolBar”属性页用于定义为MDI程序设置的工具栏。
图标按钮使用的图标有两种: (1) 按钮没有被按下时显示的图标; (2) 按钮被按下时显示的图标。 “ToolBarItemSpace”栏用来设置按钮之间的空隙,为0时没有空隙,每增加1,大约增加10个像素的距离。“Object Type”属性只有两个选择,“Menu”和“MenuCascade”,当选择后者时,就可以得到一个下拉式组合按钮。在系统中也多处用到下拉式组合按钮。 注意,只有MDI窗口才能见到工具栏。尽管其它类型的窗口也可以设置工具栏属性,但程序运行时,是见不到工具栏的。如果要使用工具栏,必须在定义窗口属性时,在“Window Type”下拉列表框中,要选择“mdi!”属性。 单击小三角, 展开菜单项 的按钮集合 图10-12 下拉式组合按钮 10.2 菜单属性
10.3 菜单事件 菜单的事件很简单,只有三个:Clicked事件、Selected事件和Help事件。
10.3 菜单事件 一般说来,菜单中的每个菜单项都需要对Clicked事件编程,以响应用户的选择操作,但在下述情况下,不需要编写事件处理程序: (1)菜单栏上的菜单标题。通常菜单标题用于展开下拉菜单。 (2)弹出级联菜单的菜单项。 编写菜单事件处理程序的过程与编写窗口对象的事件处理程序相似,菜单的事件处理程序也在脚本编辑区中编写。 编写菜单事件处理程序的步骤: (1)进入菜单画板,通过单击选择要编程的菜单项; (2)右键单击要编程的菜单项,选择弹出菜单中“script”菜单项,进入脚本编辑区; (3)在事件列表框中选择要编程的事件; (4)键入所需的脚本。
10.4 弹出式菜单 1.弹出与窗口上菜单栏中的某一部分相同的菜单 用户右击某对象或某控件时,窗口上某菜单标题下的下拉菜单或某菜单项的子菜单,作为弹出式菜单显示,用户既可以通过窗口上的菜单项完成操作,也可以通过弹出式菜单完成操作。实现上述方案很简单,在需要有弹出菜单的对象或控件的RButtonDown事件中写上下述代码即可: m_main.m_title.PopMenu(PointerX( ), PointerY( )) 其中,m_main是放置在窗口上的菜单名,m_title是某个菜单标题,该标题下的菜单项将构成弹出式菜单。PopMenu()是显示弹出式菜单的菜单对象函数,它在参数指定的位置显示弹出式菜单。为了在右击位置显示弹出式菜单,使用函数PointerX( )、PointerY( )得到右击位置。
10.4 弹出式菜单 2.弹出一个与窗口菜单栏中任何菜单都不同的菜单 弹出菜单在窗口菜单中定义,但弹出菜单又不在窗口菜单中显示。 可以采用下面的方法实现: (1)编辑与该窗口相关的菜单,例如,窗口菜单为m_main; (2)在菜单栏的最右端创建一个新的菜单标题,该标题的“Text”属性为空; (3)为该菜单标题起名,或使用系统默认的变量名; (4)不选中复选框“Visible”; (5)建立该菜单标题下的各菜单项; (6)保存该菜单对象; (7)在要显示弹出式菜单的对象的RButtonDown事件中键入下述代码: m_main.m_pop.Visible=True m_main.m_pop.PopMenu(PointerX( ), PointerY( )) m_main.m_pop.Visible=False 注意,实际自己的菜单对象名和标题为空格的菜单标题对象名代替m_main和m_pop。 右击定义了弹出式菜单的对象,弹出式菜单被显示。菜单标题设置为空格且放到菜单栏的最右边的目的是为了在菜单栏上看不到该菜单标题。 m_main.m_pop.Visible=True语句让该菜单可见,否则就不能显示出弹出式菜单。
10.4 弹出式菜单 3.把尚未与窗口相关联的菜单对象作为弹出式菜单 应用程序中可以把尚未与窗口相关联的菜单对象作为弹出式菜单使用。例如,要使用的弹出菜单对象的名称为m_pop,先创建菜单对象,例如设计一个菜单标题为“项目1”,其“Name”为“m_m1”,该标题下有若干个菜单项“要求1”、“要求2”、“要求3”等。如需弹出菜单为“项目1”下的菜单项,菜单保存名为m_pop。因为菜单m_pop未曾与窗口关联,要显示弹出式菜单,必须先创建菜单对象,其方法是: m_pop m_new //说明菜单变量 m_new = Create m_pop //创建菜单实例 现在,就可以像窗口菜单那样使用m_new了: m_new.m_m1.PopMenu(PointerX( ), PointerY( ))
10.5 菜单的函数 菜单的常用函数见表。
10.6 菜单与窗口的关联 窗口与菜单分别作为两种不同的对象来创建,并在各自的画板中编辑。菜单与窗口的关联是在窗口对象的“MenuName”属性栏中实现的。一般,只需点击“MenuName”属性栏旁边的“…”按钮,就可以打开一个选择菜单名称的对话框,当选中一个已经制作好的菜单对象后,菜单与窗口的关联也就完成了。
图10-13 菜单编程实例 10.7 菜单编程实例 本例将以前面章节中练习的一些实例窗口用菜单来管理,应用程序主窗口见图10-13。菜单标题下的菜单项见图8-14。
图10-14 菜单标题下的菜单项 10.7 菜单编程实例 实现步骤: (1)建一个新的“工作空间”和“应用”ex。 (2) 建一个新的窗口对象w_main,窗口对象的Title为“窗口控件测试”,窗口类型为mdi!。在窗口上放置一个图片控件。 (3)建一个新菜单。设计菜单时定义工具条的图标和光标移动到图标上自动出现的提示内容。方法是切换到“Toolbar”属性页,在Toolbar Item Text栏中输入光标移动到图标上自动出现的提示内容,在Toolbar Item Name下拉列表框中选择系统提供的图标,可以点击右边的“…”按钮,打开文件选择对话框,选择自己准备的图标。将菜单保存为m_main。
1.在菜单项上右键弹出菜单 2.单击“Script” 3.确定clicked事件 4.编写菜单脚本 图10-15 编写菜单脚本 10.7 菜单编程实例 (4)为菜单项编写脚本 (5)主窗口w_main与菜单的关联:打开主窗口,在General属性页的MenuName栏右侧点击“…”按钮,弹出“选择对象对话框”,选择设计好的菜单m_main即可。 (6)在系统树形区双击“应用”ex,在其Open事件中输入代码: Open(w_main) (7)保存所做工作,运行应用程序。