Visual_C面向对象编程教程_第6章_对话框和标准控件.ppt
《Visual_C面向对象编程教程_第6章_对话框和标准控件.ppt》由会员分享,可在线阅读,更多相关《Visual_C面向对象编程教程_第6章_对话框和标准控件.ppt(71页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、版权所有版权所有 复制必究复制必究 对话框对话框是Windows应用程序中一种常用的资源,其主要功能是输出信息和接收用户的输入数据。控件控件是嵌入在对话框中或其它父窗口中的一个特殊的小窗口,它用于完成不同的输入、输出功能。对话框与控件关系密切,在每个对话框上一般都有一些控件,对话框依靠这些控件与用户进行信息的交互。本章主要介绍对话框的工作原理和编程方法,并通过实例学习一些标准控件和公共控件的使用方法。6.1 对话框概述对话框概述l就用户交互输入功能而言,菜单和工具栏的功能是极其有限的。而对话框除了用来显示提示信息(如程序启动时显示版权和运行进度信息),一个主要功能是用于接收用户的输入数据。l在
2、MFC中,对话框的功能被封装在CDialog类中,而CDialog类是CWnd类的派生类。作为窗口,对话框和其它窗口一样具有窗口的一切功能。l对话框的一个典型应用是通过菜单命令或工具栏按钮打开一个对话框,当然,对话框也可以作为一个程序的主界面。6.1.1 基于对话框的应用程序基于对话框的应用程序l可以直接利用MFC AppWizard向导创建一个基于对话框的应用程序,这种程序运行后首先出现一个对话框。在向导的第一步选择Dialog Based项。此时,应用程序向导将出现与单文档和多文档程序向导不同的操作步骤,因为对话框应用程序一般不包含文档,故不支持数据库和复合文档。l按照对话框应用程序向导提
3、示的步骤进行操作就得到一个对话框应用程序项目,出现对话框编辑器和控件工具栏浮动窗口,它们采用的是一种所见即所得的可视化工作方式。利用向导创建应用程序的框架后,程序员可根据程序具体功能要求添加代码。例例 编写一个对话框应用程序MyDialog,程序运行后显示一个对话框,并在对话框上显示文本串。1执行File|New命令出现New对话框,选择MFC AppWizardexe项,输入程序名MyDialog,单击OK按钮。在随后出现的MFC AppWizard-Step 1对话框窗口中选择Dialog Based选项,单击Finish按钮就创建了应用程序项目,并在Developer Studio中打开
4、了对话框编辑器和控件工具栏。2去掉对话框中标题为“TODO:在这里设置对话控制”的静态文本控件,调整对话框大小,在成员函数CMyDialogDlg:OnPaint()中添加代码。void CMyDialogDlg:OnPaint().else CPaintDC dc(this);dc.SetBkMode(TRANSPARENT);dc.TextOut(20,50,这是一个对话框应用程序!);CDialog:OnPaint();6.1.2 对话框类对话框类CDialog MFC提供了一系列对话框类,并实现了对话框消息响应和处理机制。CDialog类是对话框类中最重要的类,我们在程序中创建的对话框
5、类一般都是CDialog类的派生类。CDialog类还是其它所有对话框类的基类,其派生关系如下所示:CObject CCmdTarget CWnd CDialog 对话框类为程序员提供了管理对话框的编程接口。CDialog类从CWnd类派生而来,所以它继承了CWnd类的成员函数,具有CWnd类的基本功能,可以编写代码移动、显示或隐藏对话框,并能根据对话框的特点增加新的成员函数,扩展它的功能。在你的CDialog类的派生类中可以直接调用CDialog类的成员函数。大部分的成员函数是虚函数,可以在你的派生类中重载,以实现特定的目的。除了CDialog类成员函数,类CWnd和CWinApp也提供了一
6、些成员函数用于对话框的管理。有关对话框的常用处理函数有关对话框的常用处理函数CDialog:CDialog()通过调用派生类构造函数,根据对话框资源模板定义一个对话框。CDialog:DoModal()激活模态对话框模态对话框,显示对话框窗口。CDialog:Create()根据对话框资源模板创建非非模模态态对对话话框框窗口。如果对话框不是Visible属性,还需通过调用CWnd:ShowWindow()函数显示非模态对话框窗口。CDialog:OnOk()单击OK按钮时调用该函数,接收对话框输入数据,关闭对话框。CDialog:OnCancel()单击Cancel按钮或按Esc键时调用该函数
7、,不接收对话框输入数据,关闭对话框。CDialog:OnInitDialog()WM_INITDIALOG消 息 处 理 函 数,在 调 用 DoModal或Create函数时系统发送WM_INITDIALOG消息,在显示对话框前调用该函数进行初始化。CDialog:EndDialog()用于关闭模态对话框窗口。CWnd:ShowWindow()显示或隐藏对话框窗口CWnd:DestroyWindow()关闭并销毁非模态对话框CWnd:UpdateData()通过调用DoDataExchange()设置或获取对话框控件的数据CWnd:DoDataExchange()被UpdateData()调
8、用以实现对话框数据交换,不能直接调用。CWnd:GetWindowText()获取对话框窗口的标题CWnd:SetWindowText()修改对话框窗口的标题CWnd:GetDlgItemText()获取对话框中控件的文本内容CWnd:SetDlgItemText()设置对话框中控件的文本内容CWnd:GetDlgItem()获取控件或子窗口的指针CWnd:MoveWindow()用于移动对话框窗口CWnd:EnableWindow()使窗口处于禁用或可用状态6.1.3 对话框数据交换对话框数据交换DDX和验证和验证DDVl在对话框中实现用户数据输入和输出的一般方法是通过ClassWizard
9、类向导将对话框控件与成员变量相关联,利用对话框数据交换DDX(Dialog Data Exchange)和验证DDV(Dialog Data Validation)机制实现数据的输入和输出。l当利用ClassWizard类向导添加成员变量时,用户如果在窗口的左下角输入数据的范围,ClassWizard将自动加入函数DDV的调用代码。例如,当添加一个UINT型的成员变量m_nInput时指定它的最小值和最大值分别为0和100,则ClassWizard类向导将在成员函数DoDataExchange()中添加以下DDV函数的调用语句:DDV_MinMaxUInt(pDX,m_nInput,0,100
10、);程序运行后,如果用户的输入数据超出0100的范围,DDV将显示一个提示信息对话框(例7-2c),提示用户有效的输入范围。UpdateData()的用法的用法:当调用UpdateData(TRUE)时,MFC通过调用DDX函数将数据从控件传递到关联的成员变量;当调用UpdateData(FALSE)时,MFC通过调用DDX函数将数据从成员变量传递到关联的的控件。利用UpdateData()函数实现了在刷新后重新获取成员变量。注意:注意:表面上看程序并没有调用UpdateData(),但是,当程序调用CDialog:DoModal()创建并显示对话框时,将自动调用CDialog:OnInitD
11、ialog()完成初始化的工作。在OnInitDialog()中调用了UpdateData(FALSE),将数据从成员变量传递到关联的控件,从而显示在控件中。而单击OK按钮将调用CDialog:OnOk()函数,在OnOK()中调用了UpdateData(TRUE),将数据从控件传递到关联的成员变量。由此看来,不管MFC将DDX技术如何复杂化,我们只需知道,DDX就如同一条双向通道,而方向控制开关就是UpdateData()函数中的BOOL类型参数是TRUE还是FALSE。6.1.4 提示信息对话框提示信息对话框 提示信息对话框也称消息对话框,用来显示有关的提示信息。提示信息对话框是一种最简单
12、的对话框,不需要用户自己创建它就可以直接使用,Visual C+提供了相应的函数实现这样的功能。:int AfxMessageBox(LPCTSTR lpText,UINT nType=MB_OK,UINT nlDHelp=0);int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT nType);int CWnd:MessageBox(LPCTSTR lpText,LPCTSTR lpCaption=NULL,UINT nType=MB_OK);这三个函数分别是MFC全局函数、API函数和CWnd类的成员函数,它们的功能基
13、本相同,但适用范围有所不同。AfxMessageBox()和:MessageBox()可以在程序中任何地方使用,而CWnd:MessageBox()只能用于控件、对话框、窗口等一些窗口类中。例如,在软件安装过程中为了弹出如下图所示的警告提示信息对话框并进行相应的处理:编写的代码如下:int nChoice=MessageBox(文件复制失败!,错误,MB_ICONWARNING|MB_ABORTRETRYIGNORE);switch(nChoice)case IDABORT:/用户按下终止按钮.caseIDRETRY:/用户按下重试按钮.case IDIGNORE:/用户按下忽略按钮.6.2
14、使用对话框使用对话框 为了在屏幕上显示对话框:(1)首先需要建立对话框资源及其与资源相关的对话框类;(2)然后添加控件、与控件关联的成员变量和消息处理函数;(3)最后在程序中显示对话框并访问与控件关联的成员变量。在Visual C+中可以利用集成工具如对话框编辑器和ClassWizard类向导很方便地创建对话框,不需要程序员手工编写太多的源代码。6.2.1 一般对话框工作流程一般对话框工作流程 l当定义了一个对话框类后,就可以利用这个对话框类声明一个对话框对象,即一个能够在屏幕上显示的对话框。l声明了一个对话框对象后,可以调用对话框类的成员函数DoModal()建立对话框窗口并显示对话框。例如
15、,假设定义了一个名为CMyDialog的对话框类,为了在屏幕上显示一个对话框,可以编写如下代码:CMyDialog myDlg;myDlg.DoModal();函数函数OnOK()、OnCancel()与与DoModal()的关系:的关系:对话框中一般都有OK和Cancel按钮,单击OK按钮时调用CDialog:OnOK()函数,单击Cancel按钮时 调 用 CDialog:OnCancel()函 数。OnOK()函 数 和 OnCancal()函数都将结束DoModal()函数调用,但令DoModal()返回不同的值。OnOK()函数令DoModal()返回IDOK,OnCancel()函
16、 数 令 DoModal()返 回IDCANCAL。用户可以根据DoModal()的返回值做出不同的选择。如:if(myDlg.DoModal()=IDOK)对话框的初始化对话框的初始化可以在三个不同的阶段所调用的函数中进行:(1)对话框类构造函数;(2)WM_CREATE消息处理函数;(3)WM_INITDIALOG消息处理函数。通常是在消息WM_INITDIALOG的消息处理函数OnInitDialog()中进行初始化。在收到WM_INIT-DIALOG消息时,对话框的框架已创建,对话框中的每个控件也已建立起来,但它们还没有在屏幕上显示。此时自然可以设置或优化对话框中各个控件的外观、尺寸、
17、位置以及其它属性。函数OnInitDialog()将被成员函数DoModal()调用。6.2.2 创建对话框创建对话框 在Windows中对话框是作为一种资源被使用,在程序中要创建一个对话框,首先要创建一个对话框模板资源,然后创建一个基于该对话框模板资源的对话框类。对话框模板资源指定了对话框本身的属性(如大小、位置、风格、类型等)和对话框中的控件及属性,而对话框类规定了对话框和对话框中每个控件的行为。通过对话框模板资源才能创建对话框类和对象。为了向应用程序项目中添加一个对话框资源,执行Insert|Resource命令或直接按Ctrl+R键,弹出Insert Resource资源列表框。一般要
18、加入通用对话框资源,所以在Insert Resource框中直接选择Dialog项,然后单击New按钮。系统将给对话框资源设置一个默认的ID标识,对话框的默认标题Caption为Dialog,对话框有OK和Cancel两个按钮。对话框资源的添加:对话框资源的添加:添加对话框资源的简单方法:添加对话框资源的简单方法:在项目工作区鼠标右击资源项Dialog,从弹出式菜单中选择“Insert Dialog”命令项。对话框是在对话框模板资源和对话框类的基础上形成的,在完成了对话框的属性和外观设计后,再来设计对话框的行为。我们需要利用ClassWizard类向导创建一个对话框类,并将这个类同先前创建的对
19、话框资源连接起来。在创建对话框类之前或之后,都可以为对话框资源添加控控件件。而在创建对话框类之后,还可以为对话框资源添加与对话框控件相关联的成成员员变变量量和消消息息处理函数处理函数。创建对话框类:创建对话框类:如果按Ctrl+W键或在对话框资源的非控件区域双击鼠标,ClassWizard类向导将发现已添加了一个对话框模板资源,却没有设计其对应的类,因此将弹出Adding a Class对话框,询问用户是否需要利用该对话框资源创建一个对话框类。lName框:用于输入对话框类的名称;lFile Name框:列出类的文件名,单击Change按钮可改变文件名;lBase class下拉框:列出可选择
20、的基类;lDialog ID下拉框:列出可选择对话框资源的ID。例例 假设已利用MFC AppWizard应用程序向导建立了一个名为Mysdi的单文档应用程序,请向应用程序中添加对话框资源和对话框类。在Adding a Class对话框单击OK按钮,弹出New Class对话框:1首先向应用程序项目添加一个对话框资源,在项目工作区鼠标右击资源项Dialog,从弹出式菜单中执行Insert Dialog命令,插入一个对话框资源。2设置对话框的属性,将光标指向对话框的空白位置,单击鼠标右键,从弹出式菜单中选择Properties项,或 直 接 按 Enter键,弹 出 Dialog Propert
21、ies属性对话框。该对话框包括General、Styles、More Styles、Extended Styles、More Extended Styles等页面,用于设置对话框多种不同的属性。3创建对话框类,鼠标双击对话框资源的非控件区域。6.2.3 添加控件及关联的成员变量添加控件及关联的成员变量l如果没有控控件件,对话框完成不了什么具体功能,对话框与控件有着密不可分的关系。结合对话框编辑器,利用Controls控件工具栏可给当前正在编辑的对话框模板资源添加控件。l若Visual C+窗口中没有出现Controls工具栏,只需将光标指向菜单栏并单击鼠标右键,从弹出式菜单中选择Control
22、s项。l控件工具栏上的每一个图标都代表了一种控件,如果不能确定控件的类型,只要将光标在该控件图标上停留片刻,就会显示该控件类型的提示。向对话框添加控件时,先在Controls工具栏单击要添加的控件,再将光标指向对话框空白区域并单击鼠标。添加与控件关联的成员变量添加与控件关联的成员变量 在生成自己的对话框类并添加需要的控件后,可以利用ClassWizard类向导在对话框类的定义中为对话框资源上的每一个控件添加一个或多个对应的成员变量。ClassWizard类向导的Member Variables页面主要用来为对话框类添加和删除与对话框控件关联的成员变量,我们在编写对话框程序时经常同该页面打交道。
23、lClass name下拉框:选择要添加成员变量的对话 框类;lControl IDs栏:选择控件,因为要添加的成员变量总是与一个对话框控件ID联系在一起,它们代表控件对象本身或控件的某项属性;lAdd Variable按钮:添加与控件关联的成员变量;lDelete Variable按钮:删除控件的某个成员变量。lControl IDs栏:列出对话框资源上已有的控件,第1列Control IDs表示控件的ID,第2列Type表示变量的类型,第3列Member表示成员变量名。在在Member Variables页面:页面:Add Member Variable对话框对话框lMember vari
24、able name框:输入成员变量名;lCategory下拉框:选择成员变量的类别,可为Control或 Value;lVariable type下拉框:选择成员变量的类型。l如果在Category下拉框选择Value项,表示要为该控件的某项属性定义一个变量,这意味着程序关心的是控件中的值,而不是控件对象本身。这时,还可以通过Variable type下拉框为变量选择不同的类型,可以选择一般的C+数据类型或Visual C+自定义的数据类型。l例如,对于编辑框控件,此时成员变量的类型可以是int、float、long、BOOL等C+一般数据类型或者是UINT、CString等Visual C+
25、自定义数据类型。l如果在Category下拉框中选择Control项,则表示定义的变量代表控件对象本身,Control类别的变量实质是一个控件对象,其类型是MFC控件类。l例如,对于编辑框控件,此时成员变量的类型为CEdit。因此,可以通过添加的控件对象访问控件类的成员变量和调用控件类的成员函数,实现对控件行为的控制和管理。l可以为一个控件同时定义一个Control类别的变量和一个Value类别的变量。这些变量都是作为对话框派生类的成员变量,为了在程序其它地方能够直接访问添加的成员变量,它们都被声明为public属性。例例 完善Mysdi程序,向对话框资源添加需要使用的控件,并添加与控件关联的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Visual_C 面向对象编程教程_第6章_对话框和标准控件 面向 对象 编程 教程 对话框 标准 控件
限制150内