案例2:可扩展的对话框
- 格式:ppt
- 大小:123.50 KB
- 文档页数:26
通用对话框控件在VB中,对话框是一种特殊的窗口,它通过显示和获取信息与用户进行交流,一个对话框可以很简单,也可以很复杂,前面介绍的MsgBox和InputBox函数可以建立简单的对话框,即信息框和输入框。
但是要定义的对话框较复杂时,将会花较多的时间和精力设计和书写代码,为此,Visual Basic 6.0提供了通用对话框控件,用其可以定义比较复杂的对话框(通用对话框)。
要把通用对话框控件加到工具箱中,可按如下步骤操作:(1)执行“工程”菜单中的“部件”命令,打开“部件”对话框。
(2)选择“控件”选项卡,如图1所示,在控件列表框中选择“Microsoft Common Dialog Control 6.0”。
图1部件对话框(3)单击“确定”按扭,通用对话框即被添加到工具箱中,如图2所示。
在设计状态下,CommonDialog控件以图标的形式显示在窗体上,其大小不能改变,在程序运行时,控件本身被隐藏。
图2通用对话框通用对话框的默认名称(Name属性)为CommonDialogX(X为1,2,3……)。
通用对话框控件为程序设计人员提供了几种不同类型的对话框,有文件对话框、打印对话框、字体对话框、颜色对话框等。
利用这些对话框,可以获取所需要的信息,例如打开文件、打印、存盘、选择颜色等。
对话框的类型可以通过Action属性设置,也可以使用说明性的Show方法来代替Action属性值。
Action属性和Show方法如表1:(1)CancelError属性:通用对话框里有一个“取消”按扭,用于向应用程序表示用户想取消当前操作。
当CancelError属性设置为True时,若用户单击“取消”按扭,通用对话框自动将错误对象Err.Number设置为32755(cdlCancel)以便供程序判断。
若CancelError属性设置为False,则单击“取消”按扭时不产生错误信息。
(2)DialogTitle属性:每个通用对话框都有默认的对话框标题,通过DialogTitle属性可由用户自行设计对话框标题上显示的内容。
8.6 对话框到目前为止,我们所介绍的每个用户界面组件都出现在应用程序创建的一个框架窗口中。
但有时候我们需要弹出独立的对话框以显示信息或者从用户收集信息。
对话框,顾名思义,就是向用户显示信息并获取程序继续运行所需数据的窗口,可以起到与用户交互的作用。
从本质上讲,对话框时一种特殊的窗体,它通过一个或多个组件与用户交互。
与JFrame一样,对话框有边框、有标题且独立存在的容器,并且不能被其他容器所包容,但是对话框不能作为程序的最外层容器,也不能保护菜单栏。
此外,java中的对话框上没有最大、最小化按钮。
8.6.1 JOptionPane 选项对话框JOptionPane提供了许多对话框样式,该类能够让你在不编写任何专门对话框代码的情况下弹出一个简单的对话框。
JOptionPane类提供了7个构造方法用于创建JOptionPane的类对象,不过在实际使用时,通常不是用new方式创建,而是使用JOptionPane类提供的一些静态方法产生。
JOptionPane有四个静态方法来显示这些简单对话框:(1)showMessageDialog:提示信息对话框,这种对话框通常只含有一个“确定”按钮。
(2)showConfirmDialog :确认对话框,这类对话框通常会询问用户一个问题,要求用户做YES/NO 的回答。
(3)showOptionDialog:选择对话框,这类对话框可以让用户自己定义对话框的类型。
(4)showInputDialog:输入对话框,这类对话框可以让用户输入相关的信息,当用户完成输入并按下确定按钮后,系统会得到用户所输入的信息。
对于每种形式的对话框都有多个静态重载方法,下面分别予以说明。
1.Message DialogMessage Dialog称为提示信息对话框,这种对话框中通常只含有一个“确定”按钮。
可以使用showMessage Dialog静态方法来显示一个Message Dialog,showMessageDialog方法具有如下重载形式。
大学计算机基础(Windows 7+Office 2010)48平的边,可以纵向改变窗口的大小;拖动窗口的四个对角,可以同时改变窗口横向、纵向的大小。
最大化的窗口不能改变其大小。
(5)窗口内容的浏览:一般情况下,窗口内容的浏览当然不是问题,因为它们都显示在窗口工作区中。
但当窗口内容较多,窗口工作区不能全部显示时,浏览当前未显示出的内容就应当借助窗口的垂直或水平滚动条了。
操作滚动条时,可以单击滚动条两头的三角按钮,也可以直接拖动滚动条中间的滑动块。
通过水平滚动条可以实现内容的左右浏览,通过垂直滚动条可以实现内容的上下浏览。
(6)窗口的关闭:单击关闭按钮即可。
窗口关闭后,任务栏上的对应按钮也随之消失。
3.多窗口的有关操作同时启动多个软件,桌面上就会出现多个窗口。
多窗口的基本操作有以下几项。
(1)窗口的切换:当用户打开多个窗口时,在任务栏上会显示各个窗口所对应的以最小化形式显示的程序按钮,通过单击这些按钮可以在各个窗口间进行切换。
利用快捷键的方式也可以实现窗口之间的相互切换。
按下【Alt+Tab 】组合键,会弹出一个切换窗口,如图2-16所示。
此时按住【Alt 】键不放,按下【Tab 】键依次移动,选择所需窗口即可。
图2-16 多窗口切换(2)窗口的自动排列:当用户打开的窗口太多时,会显得非常零乱,此时有必要对窗口进行排列。
在任务栏的空白处单击鼠标右键,在弹出的快捷菜单中可以选择“层叠窗口”、“堆叠显示窗口”、“并排显示窗口”这三种排列方式的一种对窗口进行排列,如图2-17所示。
(3)显示桌面(最小化所有窗口):在任务栏的空白处单击鼠标右键,在弹出的快捷菜单中可以选择“显示桌面”命令。
2.2.6 对话框及其操作1.对话框的认识对话框是特殊类型的窗口,是用户和Windows 交流的桥梁。
当程序或Windows 需要用户进行响应时,会经常看到对话框。
图2-18所示为一个典型的对话框。
图2-17 窗口的自动排列。
①、说明:单文档等文档视图类结构程序默认可以自适应大小的改变,比如系统自带的记事本,但是对话框程序就没有这个功能了,需要我们自己做处理!原理就是利用MoveWindow、SetWindowPos 等函数进行窗口内各个控件大小及位置的改变!===================================================②、新建一对话框工程,布置好相应的控件,如具体程序:为对话框按钮添加“最大化”按钮,看看尴尬的现象……===================================================③、响应WM_SIZE 消息,进行各个控件位置的调整:void CexpandDlg::OnSize(UINT nType, int cx, int cy){CDialogEx::OnSize(nType, cx, cy);CEdit *pEdit = (CEdit *)GetDlgItem(IDC_PAH); //获取控件句柄并转换成CEdit类型CButton *pBrowseBtn = (CButton *)GetDlgItem(IDC_BROWSE);CButton *pStartBtn = (CButton *)GetDlgItem(IDC_START);CListCtrl *pListCtrl = (CListCtrl *)GetDlgItem(IDC_ListCtrl);CListCtrl *pCheck = (CListCtrl *)GetDlgItem(IDC_CHECK);CListCtrl *BUTTON_But = (CListCtrl *)GetDlgItem(IDC_BUTTON_But);if (bStarted){ //按下放大按钮时执行以下代码///////////////////////////////////////////////////////////////////////以下是编辑框控件的变化CRect editRect1, editRect2;pEdit->GetWindowRect(&editRect1); //获得编辑框矩形的大小,窗口的边框保存到&editRect1 pEdit->SetWindowPos(NULL, 0, 0, cx-245, editRect1.Height(), SWP_NOMOVE|SWP_NOZORDER); //为编辑框指定宽度这个函数能为窗口指定一个新位置和状态。
三种菜单编程实现1.新建插件工程mon。
2.添加依赖插件3.新建包mon.handler。
4.新建类NewFolderHandler,并继承AbstractHandler5.在插件根节点新建plugin.xml文件和icons文件夹。
6.扩展mands,并添加如下扩展信息:7.扩展org.eclipse.ui.handlers,添加信息如下:1.查找要扩展的视图ID,经过系统查询,视图ID为com.teamcenter.rac.ui.views.DetailsView。
2.根据前面所讲的视图菜单扩展规则,在扩展点添加视图菜单代码如下:3.通过Eclipse启动Teamcenter客户端,进入系统,则可以看到所添加的视图菜单:1.根据前面所讲的上下文菜单扩展规则,在扩展点添加上下文菜单代码2. 重启Teamcenter系统,点击右键菜单,可以出现我们的上下文菜单添加My New Folder到File主菜单1.根据前面所讲的主菜单扩展规则,在扩展点添加主菜单代码2.启动Teamcenter系统并进入,就可以看到我们客户化的菜单项1.控制菜单出现在固定的透视图,代码如下所示:2.该方式控制My New Folder在My Teamcenter透视图中,如要添加到多个应用或者透视图中通过activeWhen可以控制菜单的启用与禁用1.在现有代码工程中建立自己的主菜单,并添加My New Folder菜单项,代码如下:新建mands.newmyfolder包。
2.新建NewFolderCustomAction类,该类继承AbstractAIFAction类并对run方法进行重写,代码如下:3.新建NewFolderCustomCommand类并继承AbstractAIFCommand类4.新建NewFolderCustomDialog类,并继承AbstractAIFDialog类,并实现InterfaceAIFOperationListener方法。
在Windows提供的“画图”程序中,点击颜色菜单下的“编辑颜色”菜单项,会出现如下图所示的对话框。
这个对话框有点特别——当您点击“规定自定义颜色”按钮时,它会自动伸长一截,如图所示:这个功能在我们自己编写的程序中,有时候也会用到的。
比如说,我们经常通过对话框来查看/设定一些参数,但这些参数只有一部分是重要的或经常变化的,而另一部分则不那么重要或很少变化的。
所以,通常情况下显示“简化版”的对话框用来设置最常用的参数,需要的时候再显示“完整版”的对话框用来设置全部的参数,是一个不错的选择。
这样,可以在不损失对话框应有功能的前提下,使得程序界面更为干净整洁。
同时,程序会显得更人性化、更智能,更体贴。
那么,如何来实现这种可伸缩的对话框呢?1 实现方法当然,可能有多种方法来实现它。
比如,两个对话框同时存在,但同时只显示一个的方法;比如,初始的对话框就是“简化版”的对话框,然后在需要显示“扩展元素”时,通过动态创建来添加控件的方法。
显然,第一种方法会占用较多的资源,还需要解决数据的同步问题;第二种方法在编写代码时会比较繁琐和麻烦。
所以,大家通常采用“犹抱琵琶半遮面”的方法。
即利用资源编辑器先将“完整版”的对话框做好,并把“简化版”的部分放在指定的区域(通常是左边或上边)。
在需要显示“简化版”的时候,通过SetWindowPos函数来调整窗口(对话框是一种特殊的窗口)的大小,从而只显示指定的部分。
2 简单实例1)利用AppWizard建立一个名为Test的单文档工程,新建一个对话框,将OK、Cancel按钮移到左下方。
插入一个新按钮(Caption:<<收缩,ID:IDC_BTN_DEMO),插入一个图像控件,将其拉成如下图所示的一条直线。
在它的属性页中,将其ID改为:IDC_SEPARATOR,打开Style选项卡,选中Sunken,使其呈现为下凹状态。
2)建立对话框对应的类CDlgShrink,并添加IDC_BTN_DEMO按钮的响应函数,代码如下:void CDlgShrink::OnBtnDemo(){// TODO: Add your control notification handler code hereCString str;//获得按钮文本GetDlgItemText(IDC_BTN_DEMO,str);if(str=="<<收缩"){//设置按钮文本SetDlgItemText(IDC_BTN_DEMO,"扩展>>");}else{SetDlgItemText(IDC_BTN_DEMO,"<<收缩");}//两个静态变量,存储对话框尺寸信息static CRect rectLarge;static CRect rectSmall;//如果还没有填充数值if(rectLarge.IsRectNull()){CRect rectSeparator;//获取完整对话框位置参数GetWindowRect(&rectLarge);//获取图像控件的位置参数(有用的是right)GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator);rectSmall.left=rectLarge.left;rectSmall.top=rectLarge.top;rectSmall.right=rectSeparator.right;//替换新值rectSmall.bottom=rectLarge.bottom;}if(str=="<<收缩"){//显示“简化版”对话框SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE|SWP_NOZORDER);}else{//显示“完整版”对话框SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),SWP_NOMOVE|SWP_NOZORDER);}}3)在主菜单中添加Test菜单,并添加“测试”菜单项(ID:IDM_DEMO),建立其在View类中的响应函数OnDemo,代码如下:void CTestView::OnDemo(){// TODO: Add your command handler code hereCDlgShrink dlg;dlg.DoModal();}编译后运行,点击“测试”菜单项,显示如下图所示的对话框。