《菜单与多文档界面设计》由会员分享,可在线阅读,更多相关《菜单与多文档界面设计(38页珍藏版)》请在金锄头文库上搜索。
1、 PowerBuilder实用教程,叶核亚 王青云,第07章 菜单与多文档界面设计,7.1 菜单概述 7.2 菜单画板 7.3 菜单设计 7.4 多文档界面设计,7.1 菜单概述,1. 菜单对象 2. 菜单对象的两种使用方式 (1) 主菜单 (2) 弹出式菜单 3. 菜单设计原则,1. 菜单对象,菜单(menu)是一种独立的PowerBuilder对象,可以显示在系统树窗口中。一个菜单对象对应一组命令或一种选择。程序运行时,在当前活动窗口中,用户选择一个菜单,可以执行一组命令或实现一种选择。菜单丰富了应用程序界面的表达能力。,2. 菜单对象的两种使用方式,(1) 主菜单 主菜单是相对于窗口而言
2、的,它出现在窗口的标题栏下,与窗口同时出现。窗口的MenuName属性指定该窗口上显示的菜单对象。调用窗口的ChangeMenu()函数在执行期间可以改变与窗口关联的菜单对象。 主菜单的结构一般较复杂。每个菜单对象由若干个菜单项(menu item)组成,每个菜单项还可以有子菜单项(submenu item),这样形成菜单的多层次结构。,2. 菜单对象的两种使用方式,(2) 弹出式菜单 弹出式菜单(pop-up menu)是相对于控件而言的,当鼠标指向某控件时,单击鼠标右键,弹出一个菜单,称为弹出式菜单。弹出式菜单的结构相对简单,一般最多只有二层菜单项。 可以为窗口及控件设计弹出式菜单。但窗口
3、及控件上没有属性与弹出式菜单关联,需要在RButtonDown事件(单击右键)中写脚本以激活弹出式菜单。,3. 菜单设计原则,菜单是与窗口分离的独立对象,通常将对窗口的操作、对窗口中数据窗口控件的操作设计成通用的菜单,使得窗口界面清楚、整洁。而且即使数据窗口控件所连接的数据窗口对象改变了,菜单项仍然可以起作用,提高了软件的可重用性。因此,我们通常采用菜单方式实现对窗口中数据的操作。 菜单设计应该结构合理,层次清晰,分工明确。每个菜单项实现特定功能,相互关联的菜单项组合在一个下拉菜单中,菜单的层次不宜太多,一般只级联一级。,7.2 菜单画板,菜单画板(Menu Painter)提供了插入菜单项、
4、设置属性、编写脚本、预览菜单等多种功能。 7.2.1 菜单画板的组成 7.2.2 菜单画板的基本操作,7.2.1 菜单画板的组成,7.2.2 菜单画板的基本操作,1. 创建菜单对象 2. 添加菜单项 3. 命名菜单项 4. 保存菜单对象 5. 分隔菜单,1. 创建菜单对象,单击工具栏上的【New】按钮,在New对话框的PB Object页上,选择Menu菜单对象,则系统创建了一个菜单对象并打开菜单画板。,2. 添加菜单项,在新建菜单对象的菜单树中只有一个菜单项Untitled0,这是一棵菜单树的根,必须为该菜单添加菜单项。操作方法是,在菜单项上单击鼠标右键,执行弹出式菜单Insert SubM
5、enu Item,在编辑框中键入菜单显示文本,之后,在所见即所得视图中即可见到新加入的菜单项。,3. 命名菜单项,菜单项的Name属性指定该菜单项的名称,Text属性指定菜单项的显示文本。当在添加菜单项时键入的文本自动成为菜单项的Text属性,并且Name属性中显示的默认菜单名是菜单项的命名前缀“m_”加Text属性值。,4. 保存菜单对象,单击工具条上的【Save】按钮,保存当前菜单对象。第1次保存时,需要在Save Menu对话框上为菜单对象命名,菜单对象的命名前缀是m_。,5. 分隔菜单,如果设置菜单项的Text属性为“-”(减号),则该菜单项显示为一条分隔线。,7.3 菜单设计,7.3
6、.1 菜单项的属性和事件 7.3.2 引用对象 7.3.3 使用弹出式菜单,7.3.1 菜单项的属性和事件,菜单项的属性如下表所示:,7.3.1 菜单项的属性和事件,菜单项的事件如下表所示:,7.3.2 引用对象,1. 在菜单中引用窗口和控件 2. 在窗口中引用菜单对象,1. 在菜单中引用窗口和控件,在菜单中引用窗口的属性时,使用窗口的名字限定属性。语法格式为: 窗口.属性 例如, w_input.WindowState = maximized! 在菜单中需要引用窗口中的控件时,使用窗口的名字限定该控件。语法格式为: 窗口.控件.属性 例如, w_input.dw_1.Enabled = tr
7、ue,2. 在窗口中引用菜单对象,在窗口脚本中引用菜单对象的语法格式为: 菜单对象.菜单项.属性 菜单对象.菜单项.子菜单项.属性 例如,菜单项及工具栏上的按钮状态应该随窗口的激活状态而变化,当窗口获得焦点时可操作,当窗口失去焦点时不可操作。因此,需要在窗口的activate事件上写以下使菜单项可操作的脚本: m_input.m_save.Enabled = false,7.3.3 使用弹出式菜单,1. 将窗口上的主菜单作为弹出式菜单使用 2. 将与窗口无关的菜单作为弹出式菜单使用,1. 将窗口上的主菜单作为弹出式菜单使用,可以将已与窗口关联的菜单对象或其中的某个下拉菜单作为弹出式菜单显示。例
8、如,在数据窗口控件dw_1的RButtonDown事件的脚本中,可以直接调用m_input的函数PopMenu()弹出菜单,语句如下: m_input.PopMenu(PointerX(), PointerY() 类似地,也可将m_input中的某个下拉菜单作为弹出式菜单显示,语句如下: m_input.m_save.PopMenu(PointerX(), PointerY(),2. 将与窗口无关的菜单作为弹出式菜单,实际应用中,窗口上的主菜单与控件上的弹出式菜单一般不会共用一个菜单对象。通常的做法是,窗口上的主菜单功能较强,结构复杂,包含较多的菜单项,而控件上的弹出式菜单结构简单,只需含有与
9、该控件相关的菜单项即可。不同的控件所需进行的操作不同,因而关联的弹出式菜单也不同。,7.4 多文档界面设计,7.4.1 SDI与MDI 7.4.2 MDI框架窗口与文档窗口 7.4.3 菜单与工具栏 7.4.4 MDI窗口的函数,7.4.1 SDI与MDI,1. 单文档界面 单文档界面(Single Document Interface,SDI)的应用程序由一个窗口构成,运行时只能处理一个文件,需要处理多个文件时,必须同时打开多个应用程序,这样任务栏上就有多个任务在运行。例如Windows的记事本、画图等程序都是SDI风格。SDI的优点是程序简单而短小,可为Windows本身所携带。,7.4.
10、1 SDI与MDI,2. 多文档界面 多文档界面(Multiple Document Interface,MDI)的应用程序由一个框架窗口和多个文档窗口组成。可同时打开多个文档窗口编辑多个文件,而不必启动多个任务。同时打开的多个文档窗口可以按层叠、级联等方式排列,其中只有一个窗口是活动的,显示在屏幕最前,其余窗口呈非活动状态,各窗口的活动状态可以切换。,7.4.2 MDI框架窗口与文档窗口,1. MDI框架窗口的组成,7.4.2 MDI框架窗口与文档窗口,2. 创建MDI框架窗口 创建MDI框架窗口的步骤如下: 创建一个新窗口,设置Window Type属性为mdi!或mdihelp!。 设置
11、MenuName属性为与之相关联的菜单对象。,7.4.2 MDI框架窗口与文档窗口,3. 文档窗口 文档窗口在PowerBuilder中称为sheet,窗口类型是main!,不能是response!、mdi!和mdihelp!类型。,7.4.3 菜单与工具栏,1. 控制文档窗口的排列方式 2. 微帮助文本 3. 工具栏 4. ParentWindow代词,1. 控制文档窗口的排列方式,主菜单中通常有一个“窗口”菜单项,用于控制多个文档窗口之间的排列方式。例如,PowerBuilder集成环境的Window菜单下就有Layer(层叠)、Cascade(级联)等菜单项用于改变画板的排列方式。,2.
12、 微帮助文本,微帮助(Microhelp)是显示在MDI框架窗口底部状态栏上的文本信息,是菜单项的帮助文本。菜单项的Microhelp属性指定该菜单项的微帮助文本。当程序运行用户选择菜单项时,系统就会在状态栏中显示当前菜单项的帮助文本。,3. 工具栏,工具栏上的图标按钮为选择菜单项提供了一种快捷方式,用户只要单击工具栏上的按钮就能完成相应菜单项的功能。MDI框架窗口和文档窗口都可以带有工具栏,当两者都有工具栏时,打开文档窗口后,文档窗口的菜单会成为当前菜单显示在工具栏上,而MDI框架窗口的菜单会被暂时隐藏。但两者的工具栏会同时显示在窗口上,以方便用户的操作。,4. ParentWindow代词
13、,保留字ParentWindow是一个代词,在菜单项脚本中使用,指代与该菜单对象相关联的MDI框架窗口。例如,在“退出”菜单项的Clicked事件上写以下脚本,关闭与与该菜单对象相关联的MDI框架窗口: close(ParentWindow) 可以通过ParentWindow引用与菜单相关联的MDI窗口的属性,但不能引用MDI窗口中控件的属性。,7.4.4 MDI窗口的函数,1. 打开文档窗口的函数 2. 控制文档窗口的函数,1. 打开文档窗口的函数,在MDI窗口或菜单对象脚本中,调用系统函数OpenSheet()打开指定的文档窗口。OpenSheet()函数的语法格式为: OpenSheet(文档窗口, MDI框架窗口 ,位置,排列方式) OpenSheetWithParm(文档窗口,参数,MDI框架窗口,位置,排列方式) 其中,文档窗口指定要在MDI框架窗口中打开的窗口。位置和排列方式两个参数为可选项,位置指定所打开的文档窗口名显示在第几个下拉菜单下面。,2. 控制文档窗口的函数,控制文档窗口的函数如下表所示:,