08对话框

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

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

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

资源描述

第8章对话框.......................................28.1对话框模板....................................................28.1.1资源描述文件对话框模板脚本..............................28.1.2对话框编辑器设计对话框..................................48.2对话框类......................................................58.2.1对话框类的定义.........................................58.2.2对话框的类型...........................................68.3对话框的数据交换.............................................108.3.1数据交换DDX函数.......................................118.3.2进行数据交换DoDataExchange函数........................118.3.3更新数据DoDataExchange函数............................128.3.4为对话框控件添加成员变量...............................122第8章对话框对话框是Windows应用程序与用户进行交互的重要手段,用户是通过操作对话框中的控件与Windows应用程序实现交互的。对话框是CDialog类对象,CDialog类是CWnd类的派生类。从程序设计的角度来说,设计一个对话框需要编写对话框模板资源描述文件和派生对话框类。本章主要介绍如下内容:对话框模板;对话框的定义及使用;对话框的综合运用;属性页。8.1对话框模板创建对话框有两种方法,一种是在资源描述文件中通过编写对话框模板脚本的方式来定义对话框的外观,另外一种是利用VC++6.0提供的资源编辑器对对话框进行设计。8.1.1资源描述文件对话框模板脚本在资源描述文件中,对话框模板脚本描述了对话框的外观及控件的放置位置。对话框模板脚本的格式为:对话框名DIALOG[载入特性选项]X,Y,Width,Height[设置选项]BEGIN对话框上控件的定义END其中,对话框名是对话框资源标识符,DIALOG是对话框的关键字,X和Y分别是对话框左上角位置的横坐标和纵坐标,Width和Height分别是对话框的宽度和高度,设置选项一般包括CAPTION(对话框标题),FONT(字体)和STYLE(样式)等。对话框上可以放置各种各样的控件,控件的定义放在BEGIN和END之间。设置选项的CAPTION后面是标题文本,FONT后面是字号和字体,STYLE确定了对话框的外貌,除了可以选用窗口的一般样式外,系统还定义了对话框所特有的样式,见表8.1.1。其中,DS_是对话框样式(DialogStyle)的前缀。3表8.1.1对话框常用的样式对话框样式名说明对话框样式名说明DS_3DLOOK使用三维边框DS_MODALFRAME细实线边框DS_FIXEDSYSSYSTEM_FIXED字体DS_SYSMODAL系统模式对话框DS_SHADOW带阴影的对话框DS_CENTER使对话框位置居中DS_SETFOREGROUND使对话框置于前台DS_LEFT使对话框位置居左通常在对话框上需要放置各种各样的控件,来实现用户和应用程序之间的交互。在对话框的资源描述文件中应该有定义控件的语句,这些语句放置在BEGIN和END之间。对话框中常用的控件及其说明见表8.1.2。表8.1.2对话框中常用的控件对话框样式名说明对话框样式名说明CHECKBOX复选框控件DEFPUSHBUTTON默认按钮控件RADIOBUTTON单选按钮控件EDITTEXT编辑框控件COMBOBOX组合框控件GROUPBOX成组框控件CTEXTOUND文本居中的静态控件ICON图标LISTBOX列表框控件LTEXT文本左对齐的静态控件PUSHBUTTON按钮控件SCROLLBAR滚动条控件建立一个工程名为exp8的单文档界面应用程序,以记事本方式打开exp8文件夹里面的资源描述文件exp8.rc。其中,关于对话框定义脚本的代码如下所示,这是用户使用鼠标点击窗口中菜单栏的“帮助”/“关于”后弹出的“关于对话框”的定义。IDD_ABOUTBOXDIALOGDISCARDABLE0,0,235,55CAPTION关于exp8STYLEDS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENUFONT9,宋体BEGINICONIDR_MAINFRAME,IDC_STATIC,11,17,20,20LTEXTexp81.0版,IDC_STATIC,40,10,119,8,SS_NOPREFIXLTEXT版权所有(C)2014,IDC_STATIC,40,25,119,8DEFPUSHBUTTON确定,IDOK,178,7,50,14,WS_GROUP4END如果需要创建一个自定义的对话框,可以通过在资源描述文件中编写对话框模板脚本的方式来设计对话框的外观和位置。例如,在exp8.rc文件中,编写下列代码建立自定义对话框IDD_DIALOG1,这个对话框包含了“确认”按钮和“取消”按钮。IDD_DIALOG1DIALOGDISCARDABLE0,0,167,53STYLEDS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENUCAPTION添加的对话框FONT9,SystemBEGINDEFPUSHBUTTONOK,IDOK,40,28,50,14PUSHBUTTONCancel,IDCANCEL,104,28,50,14END8.1.2对话框编辑器设计对话框在VC++6.0开发环境中,可以使用系统提供的可视化编辑工具来创建对话框模板资源,这种方法相对于在资源描述文件中定义对话框脚本来说更简单一些。打开可视化对话框编辑工具的方法如下。在工程窗口中选择第二个选项卡“ResourceView”,右键单击Dialog文件夹,在弹出式下拉菜单中选择InsertDialog选项,出现如图8.1.1所示的对话框编辑器。在这个对话框编辑器中,有一个对话框模板和一个控件箱,这个对话框模板的资源标识符为IDD_DIALOG1。图8.1.1开发环境提供的对话框编辑器5对话框IDD_DIALOG1的右上角预置了两个常用的按钮控件“OK”和“Cancel”,系统已经为这两个按钮设计了与功能相应的代码。如果不+需要这些预置的按钮控件,可以用鼠标选中这两个按钮,再按下键盘上的Delete键来删除它们。根据程序需要,可以使用鼠标选中控件箱中的控件,添加到这个默认的对话框模板上,调整相应的控件位置后再点击“文件”菜单的“保存”菜单选项,于是创建对话框模板资源的工作就结束了。8.2对话框类8.2.1对话框类的定义要让用户使用对话框,程序员需要先定义对话框类。MFC提供了对话框类CDialog,程序员自定义的对话框类要从CDialog类派生而来。创建自定义的对话框类要通过CDialog类的构造函数,CDialog类有两个构造函数,它们分别是:CDialog(LPCTSTRlpszTemplate,CWnd*pParentWnd=NULL);和CDialog(UINTnIDTemplate,CWnd*pParentWnd=NULL);函数中的第一个参数是对话框模板资源名称或资源标识符ID,第二个参数是对话框的父窗口指针,通常情况下,可以使用其默认值NULL。在实际编程过程中,经常使用VC++6.0提供的编程工具来派生自定义的对话框类。派生自定义的对话框类的方法如下。打开图8.1.1所示的对话框资源编辑器,用鼠标双击对话框模板,在图8.2.1所示的AddaClass对话框中单击“Ok”按钮,在图8.2.2所示的NewClass对话框中填写自定义的对话框类名(例如:COurDialog),单击“OK”按钮,即可生成自定义类的代码。系统自动生成的自定义对话框类代码的主要部分为://COurDialog类的声明classCOurDialog:publicCDialog{public:COurDialog(CWnd*pParent=NULL);//standardconstructorenum{IDD=IDD_DIALOG1};…};//COurDialog类的实现文件中构造函数定义COurDialog::COurDialog(CWnd*pParent/*=NULL*/):CDialog(COurDialog::IDD,pParent){6}图8.2.1AddaClass对话框图8.2.2NewClass对话框8.2.2对话框的类型1.模态对话框创建自定义对话框类COurDialog后,就可以在需要使用对话框的地方使用它了。如果使用CDialog类的成员函数DoModal()来创建对话框,则该对话框就是一个模态对话框,模态对话框需要用户在对话框上操作。DoModal()函数的原型是:virtualintDoModal();DoModal()函数首先载入对话框模板资源(例如,IDD_DIALOG1),接着调用初始化对话框函数OnInitDialog()函数,并且在这个函数中调用更新数据函数UpdateData()初始化对话框上放置的控件。然后,该函数将启动一个消息循环,以响应用户的输入。该消息循环截获了几乎所有的用户输入消息,从而使Windows应用程序的主消息循环接收不到用户消息,所以用户只能与对话框进行操作交互,这就是模态对话框的特点。当用户单击对话框的“OK”按钮或“Cancel”按钮时,在函数DoModal()结束之前,将对话框对象销毁。创建并运行模态对话框的代码如下:COurDialogdialog;//定义自定义对话框类的对象intresult=dialog.DoModal();//显示并运行模态对话框7在系统提供的对话框模板上,系统预先设置好了OK按钮和Cancel按钮,并为这两个按钮编写了相应的代码。当用户按下OK按钮时,会调用消息响应函数CDialog::OnOK()。OnOK()函数首先调用UpdateData()函数读取控件上的数据(例如,用户在对话框上的编辑框中输入的数据),并把数据传递给对话框类中与该控件对应的成员变量。然后,调用CDialog::EndDialog()函数关闭对话框,并以OK按钮的标识符IDOK作为DoModal()函数的返回值。当用户按下Cancel按钮时,会调用消息响应函数CDialog::OnCancel(),而它只调用函数CDialog::EndDialog()来关闭对话框,并以Cancel按钮的标识符IDCANCEL作为DoModal()函数的返回值。如果编程人员需要在OK按钮和Cancel按钮的消息响应函数中做一些其他事情,可以重写OnOK()和OnCancel()这两个消息响应函数。但是,在重写的时候函数中一定要调用CDialog类的成员函数CDialog::OnOK()和CDialog::OnCancel(),以便系统做相应的默认处理。例8.1创建一个单文档界面应用程序,在运行时如果在窗口用户区单击鼠标右键,会出现如图8.2.3所示外观的模态对话框。在模态对话框中点击“OK”按钮后弹出消息框。(1)用MFCAppWizard创建工程名为exp8_1的单文档界面应用程序。(2)用VC++6.0提供的可视化设计工具创建一个对话框模板资源,得到系统默认的对话框。右键单击Dialog文件夹,在弹出式下拉菜单中选择InsertDialog选项,见图8.1.1。(3)使用控件箱在对话框模板上添加需要的控件,例如静态文本控件和编辑框控件,

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

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

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

×
保存成功