对话框编程(修改版)_第1页
对话框编程(修改版)_第2页
对话框编程(修改版)_第3页
对话框编程(修改版)_第4页
对话框编程(修改版)_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章对话框(DIALOG)编程4.1对话框简介4.2创建与销毁对话框4.3消息对话框4.4通用对话框CWndCDialog对话框(Dialog):是用户与应用程序交互的重要的界面(输入数据,显示数据)。对话框实质是一个窗口,在MFC中用CDialog类来描述。MFC用来创建对话框的类除了CDialog类外,还有CPropertySheet(属性单)和CPropertyPage(属性页)。

CObject└CCmdTarget└CWnd└CDialog4.1对话框简介对话框分为两类:模态对话框和非模态对话框。模态对话框是这样的对话框,当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。非模态对话框则是,它弹出后,本程序其他窗口仍能响应用户输入。非模态对话框一般用来显示提示信息等。4.1对话框简介4.1.1对话框的控件简介对控件的理解:控件是可以处理与发送消息的对象。首先,控件是一个对象;其次控件可以处理消息(自身处理消息很少用)与发送消息(当自身状态发生改变的时候向父窗口发送消息,由父窗口负责消息响应)。常用控件StaticTextEditboxButtonCheckboxComboboxListboxGroupbox对话框的控件编排TabOrder及快捷键通过菜单Layout->TabOrder设置用户使用Tab键在控件间移动时的移动顺序。(控件必须含有样式TABSTOP)通过设置控件名称加上“&”指定快捷键通过指定DEFAULTBUTTON指定默认按钮4.1.1对话框控件操作演示上面的控件。4.2创建与销毁对话框MFC中对话框的描述(1)对话框模板资源,表示对话框的外观(2)定义一个对话框类,描述对话框的功能

创建对话框的步骤:

(1)创建对话框资源(2)创建对话框类(3)为对话框类添加成员变量(4)对话框的初始化和添加消息处理函数(5)

创建并显示对话框模式对话框和非模式对话框的区别主要在创建方式不同。4.2.1模态对话框(ModalDialogBox)对话框分为模态和非模态之分,两者的差别在于对话框是否垄断应用程序的所有消息。Modaldialogboxes,whichrequiretheusertorespondbeforecontinuingtheprogramModelessdialogboxes,whichstayonthescreenandareavailableforuseatanytimebutpermitotheruseractivities模态对话框的创建:virtualintCDialog::DoModal();Example:CMyDialogdlg;dlg.DoModal();载入对话框模板UpdateData()OnInitDialog()消息循环OnOK()UpdateData()EndDialog()returnIDOKOnCancel()EndDialog()returnIDCANCELOK按钮消息Cancel按钮消息DoModal()执行过程垄断消息4.2.1模态对话框(ModalDialogBox)4.2.1模态对话框(ModalDialogBox)讲解演示模态对话框的演示。与对话框中控件相互作用方法1CWnd*pWnd=GetDlgItem(IDC_CHECK);pWnd->EnableWindow(TRUE);方法2通过ClassWizard添加Control类型变量4.2.2对话框数据交换和数据检验MFC提供了DDX(X表示eXchange)机制,允许程序员实现设定控件与变量之间的对应关系,并正确的传递数据。使用UpdateData(TRUE):控件的值传给变量使用UpdateData(FALSE):变量的值传给控件对话框退出时,控件里的值自动传到对应的变量上去。MFC提供了DDV(V表示Validation)机制,保证输入的数据在你要求的范围之内。借助ClassWizard方便的完成这些工作。4.2.2对话框数据交换和数据检验1.数据交换:DDX(DialogDataeXchange)DataControl显示保存ControlMemoryVariablesBinding如何实现?2.数据检验(DDV,DialogDataValidation)MFC中提供了以DDV_为前缀的函数,用于输入数据的检验。DDX函数MFC定义了大量的以DDX_为前缀的函数,用来实现变量与控件的绑定以及数据交换。如,DDX_Text()、DDX_Radio()、DDX_Check()等。DDX_TextvoidAFXAPIDDX_Text(CDataExchange*pDX,intnIDC,BYTE&value);voidAFXAPIDDX_Text(CDataExchange*pDX,intnIDC,short&value);……UpdateData()DoDataExchange()DDX_XXXX()非模态对话框(ModelessDialog),1)没有自己的、独立的消息循环,而是与应用程序使用同一个消息循环,从而使它不能垄断用户消息。2)设计非模态对话框的方法和过程与模态对话框(ModalDialog)相同,即设计对话框模板资源,然后是创建对话框类。使用非模态对话框:与模态对话框的使用方法不同,非模态对话框,1)打开对话框,使用CDialog::Create(),因为Create()不会启动新的消息循环。2)销毁,使用CWnd::DestroyWindow()销毁,即关闭对话框3)在动态存储器中创建,即使用new操作符。关闭之后使用delete操作符4)使用标志性变量跟踪非模态对话框的运行状态,避免多次打开4.2.2非模态对话框4.2.2非模态对话框

与模式对话框的区别:CDialog::DoModal()~CDialog::Create()EndDialog~DestroyWindow创建无模式对话框的步骤

1、创建对话框资源模板2、创建对话框类3、为对话框类添加成员变量4、用NEW操作符在堆上创建一个对话框对象5、调用对话框类的Create()函数来创建对话框窗口6、重载对话框类的Ok和Cancel按钮的消息处理函数。步骤:建立一个对话框资源及相应的类。修改对话框中默认的OnOK及OnCancel函数,使其不调用默认的函数,而是改为DestroyWindow()创建并显示对话框

CMyDLg*dlg=newCMyDLg(); dlg->Create(IDD_DIALOG1); dlg->ShowWindow(SW_SHOW);Example:CNonMdlDlg*m_pNameDlg;boolm_bActive;m_pNameDlg=newCNonMdlDlg;……m_bActive=TRUE;CDialog::Create(CNonMdlDlg::IDD);……m_bActive=FALSE;DestroyWindow();……m_pNameDlg->SetActiveWindow();……deletem_pNameDlg;4.2.3属性页对话框属性表的功能都被封装在一对MFC类中:CPropertySheet和CPropertyPage。CPropertySheet代表属性表自身,是从CWnd派生而来。CPropertyPage代表属性表的页,是从CDialog派生而来。创建属性表的步骤1、针对属性表的每一页创建一个对话框模板,定义页的内容和特性。将对话框标题设成你希望在属性表页上方标签中显现的标题。2、针对属性表的每一页由CPropertyPage派生出一个类似对话框的类。3、由CPropertySheet定义一个属性表对象。将属性表类和第二步中得到的属性表页类实例化。在构造函数中利用CPropertySheet::AddPage将各页按期望中的显示顺序添加到属性表中。4、调用属性表的DoModal函数将属性表显示在屏幕上(也可以像对话框那样建立无模式的属性表)。AfxFormatString1替换字符用字符串由lpsz1指向“%1的所有实例”nIDS确定模板的字符串资源。voidAfxFormatString1(CString&rString,UINTnIDS,LPCTSTRlpsz1);rString将包含提供的字符串的CString

引用,在执行后替换。nIDS将执行模板替换字符串的资源ID。lpsz1将替换%1格式字符“"在模板字符串。备注:新窗体的字符串存储在rString中。例如,在中,如果字符串在字符串表中%1“找不到的文件”和lpsz1与“C:\MYFILE.TXT",rString相等将包含字符串“找不到该文件的C:\MYFILE.TXT”。此函数用于格式字符串为有用发送到消息和其他窗口。4.2.3属性页对话框讲解演示属性页的使用。4.3消息对话框

一种简单的对话框,用户可以直接调用消息对话框函数来使用它,而不需要自己创建。VisualC++提供三个消息对话框函数,它们的原型为:intAfxMessageBox(LPCTSTRlpText,UINTnType=MB_OK,UINTnIDHelp=0);intMessageBox(HWNDhWnd,LPCTSTRlpText,LPCTSTRlpCaption,UINTnType);intCWnd::MessageBox(LPCTSTRlpText,LPCTSTRlpCaption=NULL,UINTnType=MB_OK);MessageBox函数用于显示信息int //返回用户所选按钮代表的数值MessageBox(

HWND

hWnd,

//窗口句柄 LPCTSTR

lpText,

//消息框主体显示的文本 LPCTSTR

lpCaption,

//消息框标题栏显示文本

UINT

uType

//代表消息框风格的常数组合);

消息框风格以MB_开始的常数组合代表消息框的风格多种风格之间用“|”分隔if(IDOK==MessageBox( NULL, "是否退出本程序?", "退出",

MB_OKCANCEL|

MB_ICONQUESTION))MessageBox(NULL,"再见!","退出",MB_OK);4.3消息对话框4.3消息对话框4.4

通用对话框MFC专门提供了一些通用的对话框类,如,

颜色选择对话框(CColorDialog)文件选择对话框(CFileDialog)字体选择对话框(CFontDialog)打印和打印设置对话框(CPrintDialog)1.文件对话框(CFileDialog)TheCFileDialogclassencapsulatestheWindowscommonfiledialogbox,whichprovidesaneasywaytoimplementthestandardFileOpenandFileSaveAsdialogboxes.X:\PROGRAMFILES\...\TEXT.ABC.TXTPATHFILENAMETITLEEXTENDCFileDialog(

BOOL

bOpenFileDialog,

LPCTSTR

lpszDefExt

=

NULL,

LPCTSTR

lpszFileName

=

NULL,

DWORD

dwFlags

=

OFN_HIDEREADONLY

|

OFN_OVERWRITEPROMPT,

LPCTSTR

lpszFilter

=

NULL,

CWnd*

pParentWnd

=

NULL

);ParametersbOpenFileDialog:TRUE-文件打开对话框;FALSE-保存文件对话框lpszDefExt:默认的扩展名。ifNULL,则无默认扩展名lpszFileName:初始的文件名,ifNULL,则显示空文件名dwFlags:不同的组合来自定义对话框lpszFilter:文件名过滤参数,用于筛选指定的文件pParentWnd:父窗口更多信息参考MSDN,或4.4

通用对话框用来指明对话框文件类型框中所使用的过滤参数,每一个参数由两项组成:第一项:显示的文本第二项:文件的类型,即第一项|第二项如果使用多个过滤器,则使用“|”连接起来;同种类型文件的扩展名间可以用“;”分割,末尾用“||”

指明。lpszFilterparameter4.4

通用对话框Example:Word文档(*.doc)|*.doc||Word文档(*.doc)|*.doc|位图(*.bmp)|*.bmp;*.dib|全部文件(*.*)|*.*||char*pFilters="Word文档(*.doc)|*.doc|位图(*.bmp)|*.bmp|全部文件(*.*)|*.*||";CFileDialogfileDlg(TRUE,NULL,"*.doc",NULL,pFilters);intresult=fileDlg.DoModal();4.4

通用对话框常用的成员函数及其功能1、CStringCFileDialog::GetPathName()

得到完整的文件名,包括目录名和扩展名如:c:\test\test1.txt

2、CStringCFileDialog::GetFileName()

得到文件名,包括扩展名如:test1.txt

3、CStringCFileDialog::GetExtName()

得到完整的文件扩展名,如:txt

4、CStringCFileDialog::GetFileTitle()

得到文件主名,不包括目录名和扩展名如:test1

5、POSITIONCFileDialog::GetStartPosition()对于选择了多个文件的情况得到第一个文件位置。

6、CStringCFileDialog::GetNextPathName(POSITION&pos)对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。7、POSITIONCFileDialog::GetStartPosition()来得到最初的POSITION变量。2.字体选择对话框(CFontDialog)CFontDialog(

LPLOGFONT

lplfInitial

=

NULL,

DWORD

dwFlags

=

CF_EFFECTS

|

CF_SCREENFONTS,

CDC*

pdcPrinter

=

NULL,

CWnd*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论