您好,欢迎访问三七文档
第九部分对话框对话框(Dialog)对话框(Dialog)实际上也是一个窗口类型:模态对话框和非模态对话框File/Open命令打开的文件搜索对话框是模态对话框MicrosoftWord中的搜索对话框是非模态对话框基本概念对话框是一种特殊的窗口主要功能是输出信息和接收用户的输入对话框与控件是密不可分的在每个对话框内一般都有一些控件对话框依靠这些控件与用户进行交流信息使用模态对话框有两个步骤1.在视图类或框架窗口类的消息响应函数(如鼠标消息或菜单选项的命令消息响应函数)中说明一个对话框类的对象(变量);2.调用CDialog::DoModal()成员函数。根据DoModal()函数的返回值是IDOK还是IDCANCEL来判断用户是确定还是取消了对对话框的操作对话框由两部分组成1.对话框模板资源:对话框模板用于指定对话框的形状、所用控件及其分布,DeveloperStudio根据对话框模板来创建对话框对象。2.对话框类:对话框类用来实现对话框的功能。由于各应用程序中的对话框具体功能不同,因此一般要从CDialog类中派生一个新类,以便添加特定的数据成员和成员函数。对话框的设计(具体)编辑资源(用资源编辑器ResourceView)1.向项目中添加对话框模板资源;2.编辑对话框模板资源,加入所需的控件编写对话框类(用ClassWizard)3.从CDialog类派生对话框类,加入与各控件对应的数据成员;在CView中使用4.在框架窗口类或视图类的菜单选项、鼠标事件或其他消息响应函数中添加对话框对象的应用代码。注意:要记得#include“…”对话框类的头文件!对话框类的设计方法1.从CDialog类派生一个对话框类,并通过对话框模板资源的ID建立它们之间的对应关系;(这一步会自动完成!)2.为对话框类添加与各控件相对应的成员变量;(小心类型!!)3.为对话框进行初始化工作;4.增加对控件通知消息的处理。例:给吹泡泡程序添加一个自己的版权对话框并使用鼠标右键弹出控件控件:一个现成的程序组件,可以独立运行以完成一定的功能;控件都是CWnd类派生出来的后代类对象每个控件均有一个标识符(ID)静态文本控件静态文本控件是最简单的控件;用途是在对话框上显示一段文字;静态文本控件的文字和属性均在编辑对话框模板资源时确定,程序运行中一般无法改变,在编程时无需考虑静态文本控件。它的ID并不重要,因为无需编程编辑控件编辑控件是最有用的控件,其功能十分全面,本身就是一个小型的文本编辑器。编辑控件的作用是接受用户输入的字符串信息。它的ID很重要,因为要实现数据交换对话框的初始化对话框的初始化工作一般在构造函数和CDialog::OnInitDialog()函数中完成;在对话框创建时,会收到WM_INITDIALOG消息,对话框对该消息的处理函数是OnInitDialog()如果必要,用ClassWizard重载此函数。对话框数据交换和数据检验机制通过控件与用户的数据交流是分两步完成的;在调用对话框类的DoModal()函数打开对话框之前,可以通过设置对话框数据成员的值,使其成为控件窗口的显示信息;在退出对话框后,又可将对话框数据成员所反映的用户输入数据应用到程序的其他部分。控件数据成员对话框类的数据成员通常被说明为publicCDialog::DoDataExchange数据交换和检验机制通过CDialog::DoDataExchange()函数来完成,其原型为:virtualvoidDoDataExchange(CDataExchange*pDX);数据检验,即对用户输入数据的范围进行检查,如果不符合要求则拒绝接受。数据交换和检验机制不仅适用于编辑框控件,还适用于检查框、单选按钮、列表框和组合框等控件。理解概念。代码已自动生成,无需改动!!!与编辑控件有关的数据交换函数voidDDX_Text(CDataExchange*pDX,intnIDC,int&value);voidDDX_Text(CDataExchange*pDX,intnIDC,long&value);pDX是指向CDataExchange对象的指针参数nIDC是对话框对象中的编辑控件的标识符参数value是对话框中的数据成员的引用常用的数据检验函数voidDDV_MaxChars(CDataExchange*pDX,CStringconst&value,intnChars);voidDDV_MinMaxByte(CDataExchange*pDX,BYTEvalue,BYTEminVal,BYTEmaxVal);voidDDV_MinMaxDateTime(CDataExchange*pDX,CTime&refValue,constCTime*refMinRange,constCTime*refMaxRange);voidDDV_MinMaxDWord(CDataExchange*pDX,DWORDconst&value,DWORDminVal,DWORDmaxVal);模态对话框编程步骤总结1.使用对话框编辑器建立对话框模板资源并加入所需的控件。2.使用ClassWizard建立相应的对话框类,该类从CDialog继承并且和步骤1所建立的对话框模板资源相关联。3.使用ClassWizard给对话框类添加数据成员,添加控件和数据成员的数据交换功能以及数据校验。4.使用ClassWizard给对话框的按钮和其它产生事件的控件添加消息处理函数。5.为特定的控件初始化(在OnInitDialog中)和消息处理函数编写代码。6.在视图类中编写代码激活对话框。代码中包含对对话框类的成员函数DoModal的调用。当用户从对话框窗口退出后,DoModal才返回。在CView中使用对话框编程(重要)CNameEditdlg;dlg.m_strNameEdit=“AAA”;//在Cview中赋值Dlg.DoModal()调对话框------以下在对话框中-----------M_strNameEdit===》控件用户改变控件的值控件===》M_strNameEdit------在CView中取值------------M_strName=dlg.m_strNameEdit非模态对话框(了解)非模态对话框的模板资源必须具有Visible风格;非模态对话框对象是用new操作符动态创建的;通过调用CDialog::Create()函数来启动非模态对话框;必须重载并重新编写对话框的OnOK()和OnCancel()函数必须在对话框关闭后,用delete操作符删除之;必须有一个标志表明非模态对话框是否打开。公用对话框掌握:CColorDialog(颜色选择对话框类)CFontDialog(字体选择对话框类)了解:CPrintDialog(打印和打印设置对话框类)CFindReplaceDialog(文本查找和替换对话框类)CFileDialog(文件选择对话框类)颜色选择对话框模态对话框说明一个CColorDialog类的对象调用CColorDialog::DoModal()函数来启动颜色选择对话框调用CColorDialog::GetColor()可得到一个COLORREF类型的值来表示在对话框中选择的颜色。字体选择对话框说明一个CFontDialog类的对象(变量);调用CFontDialog::DoModal()函数来启动对话框;调用CFontDialog的成员函数GetCurrentFont()来获得所选字体的信息。颜色对话框的使用voidCMyView::OnLButtonDblClk(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcall//defaultCColorDialogdlg;//用公用对话框类声明一个对象if(dlg.DoModal()==IDOK)//调用DoModal方法{m_color=dlg.GetColor();//返回后取颜色值Invalidate();}CView::OnLButtonDblClk(nFlags,point);}颜色对话框的使用voidCMyView::OnDraw(CDC*pDC){CMyDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedataherepDC-SetTextColor(m_color);//使用颜色pDC-TextOut(10,10,m_strName);}对话框模板资源的编辑1.ID属性2.Caption(标题)属性3.Visible属性4.Disable属性5.Tabstop属性6.Group属性单选按钮在同一组内的具有互斥的特性,即在这些单选按钮中只能有一个是选中的。如果一个控件具有Group属性,则这个控件以及按Tab顺序紧随其后的所有控件都属于一组的,直到遇到另一个有Group属性的控件为止。使用ClassWizard建立对话框类按Ctrl+W进入ClassWizardClassWizard会询问是否要为这个新的对话框模板创建一个对话框类;Name栏输入对话框类的名称,Baseclass栏选择CDialog,DialogID栏选择新对话框模板的标识符;WM_INITDIALOG消息和控件通知消息。为对话框类加入成员变量对话框的主要功能是输出和输入数据,这个任务是通过控件完成的;与控件对应的成员变量即可以是一个数据,也可以是一个控件对象;利用ClassWizard可以很方便地为对话框类添加数据成员。基于对话框的应用程序基于对话框的应用程序结构适合于比较简单的应用;例如Windows提供的CharacterMap(字符映射表),Calculator(计算器)和PhoneDialer(电话拨号程序)等实用程序。生成基于对话框的应用程序第1步对话框中,选择生成DialogBased(基于对话框)的应用程序即可第2步用于设置应用程序的属性,包括是否使用版权对话框、是否需要生成上下文有关的帮助、是否使用3D风格的控件,以及是否需要对ActiveX控件的支持等问题第3步用于设置程序风格;第4步用于检查和修改拟为应用程序生成的类的有关参数。
本文标题:第九部分 对话框
链接地址:https://www.777doc.com/doc-2124533 .html