第07章 菜单与多文档界面设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

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

1 / 38
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功