《对话框程序》PPT课件.ppt

上传人:牧羊曲112 文档编号:5496862 上传时间:2023-07-14 格式:PPT 页数:30 大小:345.97KB
返回 下载 相关 举报
《对话框程序》PPT课件.ppt_第1页
第1页 / 共30页
《对话框程序》PPT课件.ppt_第2页
第2页 / 共30页
《对话框程序》PPT课件.ppt_第3页
第3页 / 共30页
《对话框程序》PPT课件.ppt_第4页
第4页 / 共30页
《对话框程序》PPT课件.ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《《对话框程序》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《对话框程序》PPT课件.ppt(30页珍藏版)》请在三一办公上搜索。

1、第四章 对话框程序,Windows应用程序经常通过对话框与用户通信。对话框是一种用户界面,是Windows应用程序中一种常用的资源,其主要功能是输出信息和接收用户的输入数据。控件是嵌入在对话框中或其他父窗口中的一个特殊的小窗口,用于完成不同的输入输出功能在每个对话框内一般都有一些控件,对话框依靠这些控件与用户进行交互。,对话框概述,对话框实际上是一个窗口,在MFC中,对话框的功能被封装在了CDialog类中,CDialog类是CWnd类的派生类。作为窗口,对话框具有窗口的一切功能。对话框的一个典型应用是通过菜单命令或工具栏按钮打开一个对话框,当然对话框也可以作为一个应用程序的主界面。,对话框类

2、型,对话框分为模态对话框和非模态对话框两种类型。模态对话框垄断了用户的输入,当一个模态对话框打开时,用户只能与该对话框进行交互,而其它用户界面对象收不到用户的输入信息。非模态对话框类似普通的窗口,并不垄断用户的输入。在非模式对话框打开时,用户随时可用鼠标单击等手段激活其他窗口对象,操纵完毕后再回到本对话框。,对话框组成,从MFC编程的角度来看,一个对话框由两部分组成:对话框模板资源:对话框模板用于指定对话框的形状、所用控件及其分布,Developer Studio根据对话框模板来创建对话框对象。对话框类:对话框类用来实现对话框的功能。由于各应用程序中的对话框具体功能不同,因此一般要从CDial

3、og类中派生一个新类,以便添加特定的数据成员和成员函数。,对话框模板的设计,包括对话框模板的设计和对话框类的设计两个主要方面。对话框模板的设计应有以下步骤:1.向项目中添加对话框模板资源;2.编辑对话框模板资源,加入所需的控件;3.从CDialog类派生对话框类,加入与各控件对应的数据成员;4.在框架窗口类或视图类的菜单选项、鼠标事件或其他消息响应函数中添加对话框对象的应用代码。,对话框类的设计,对话框类的设计应有以下步骤:1.从CDialog类派生一个对话框类,并通过对话框模板资源的ID建立它们之间的对应关系;2.为对话框类添加与各控件相对应的成员变量3.为对话框进行初始化工作4.增加对控件

4、通知消息的处理。,4.2模态对话框,在程序中使用模态对话框有两个步骤:1.在视图类或框架窗口类的消息响应函数(如鼠标消息或菜单选项的命令消息响应函数)中说明一个对话框类的对象(变量)2.调用CDialog:DoModal()成员函数。,DoModal函数,DoModal函数负责模态话框的创建和撤销。在创建对话框时,DoModal()函数的任务包括载入对话框模板资源、调用OnInitDialog()函数初始化对话框和将对话框显示在屏幕上。完成对话框的创建后,DoModal()函数启动一个消息循环,以响应用户的输入。由于该消息循环截获了几乎所有的输入消息,使主消息循环收不到对对话框的输入,致使用户

5、只能与模态对话框进行交互,而其它用户界面对象收不到输入信息。在应用程序中,可根据DoModal()函数的返回值是IDOK还是IDCANCEL来判断用户是确定还是取消了对对话框的操作。,关闭对话框,如果用户在对话框内单击了标识符为IDOK的按钮,或者按了回车键,则CDialog:OnOK()函数会被调用。OnOK()函数首先调用UpdateData()函数将数据从控件传给对话框成员变量,然后调用CDialog:EndDialog()函数关闭对话框。关闭对话框后,DoModal()函数会返回值IDOK。如果用户单击了标识符为IDCANCEL的按钮,或按了ESC键,则会导致对CDialog:OnCa

6、ncel()函数的调用。该函数只调用CDialog:EndDialog()函数关闭对话框。关闭对话框后,DoModal()函数会返回IDCANCEL。,MFC AppWizard应用程序向导,MFC AppWizard应用程序向导可以创建文档视图结构的应用程序框架,也可以创建基于对话框的应用程序框架。在MFC AppWizard向导的第1步选择Dialog Based选项,按照对话框应用程序向导提示的步骤进行操作就可以得到一个对话框应用程序项目。利用向导创建应用程序的框架后,程序员可用所见即所得的可视化工作方式设计对话框模板,也可根据程序具体功能要求为对话框类添加成员和代码。,简单的对话框程序

7、案例,例4.1 编写一个对话框应用程序MyDialog,程序运行后显示一个对话框,并在对话框上显示文本串“这是一个对话框应用程序”。,简单对话框程序案例的生成与操作过程,(1)用AppWizardexe项,生成基于对话框的程序项目.(2)去掉对话框中标题为“TODO:在这里设置对话控制”的静态文本控件,调整对话框大小,在成员函数CmyDialog:OnPaint()中修改else 部分,添加如下代码:CPaintDC dc(this);dc.SetBkMode(TRANSPARENT);/将背景设置为透明模式dc.TextOut(70,50,“这是一个对话框应用程序”);(3)编译与链接后即可

8、运行,一般对话框程序的对话框模板设计,利用Developer Studio提供的对话框模板的编辑窗口,用户可以方便地设计对话框模板。主要步骤为:(1)从控件面板选择控件并放在对话框模板中。(2)可以用鼠标拖动控件,并可修改控件大小、位置。(3)修改控件属性,包括ID、标题等属性。(4)设置控件的Tab顺序(5)测试对话框效果,一般对话框类设计的步骤,(1)通过ClassWizard类向导,以资源模板为基础创建一个对话框类(2)添加与控件关联的对话框类成员变量(3)在构造函数中的初始化对话框的数据成员(4)在OnInitDialog消息处理函数中初始化控件(5)添加控件消息的响应函数,对话框的数

9、据交换和数据检验机制,对话框的数据成员变量存储了与控件相对应的数据。数据变量需要和控件交换数据,以完成输入或输出功能。用户只要在控件中修改数据,就可以修改对话框成员变量值。对话框的这种能力是靠数据交换来实现的。数据交换和检验机制通过CDialog:DoDataExchange()函数来完成,其原型为:virtual void DoDataExchange(CDataExchange*pDX);该函数可重载以加入其它数据交换函数来实现对话框数据成员与控件的联系。该函数可由程序控件直接调用,也可通过UpdateData()函数间接调用。UpdateData(true)为控件的数据交换到变量;Upd

10、ateData(false)为变量的数据交换到控件;,4.3非模态对话框,在对话框的创建和删除过程中,非模态对话框与模态对话框相比有下列不同之处:(1)非模态对话框的模板资源必须具有Visible风格(2)非模态对话框对象是用new操作符动态创建(3)通过调用CDialog:Create函数来启动非模态对话框。(4)必须重载对话框的OnOK()和OnCancel()函数,并在其中调用CWnd:DestroyWindow()来关闭非模态对话框。(5)在对话框关闭后,用delete操作符删除对话框对象。(6)必须有一个标志表明非模态对话框是否打开。,为吹泡泡程序添加非模态对话框(1),void C

11、dlg:OnButton1()UpdateData(TRUE);if(m_edit=5,为吹泡泡程序添加非模态对话框(2),void CMyWnd:OnLButtonDblClk(UINT nFlags,CPoint point)if(m_pd=NULL)m_pd=new Cdlg;m_pd-m_edit=100;m_pd-Create(IDD_DIALOG1,NULL);m_pd-ShowWindow(SW_SHOW);elsem_pd-SetActiveWindow();CFrameWnd:OnLButtonDblClk(nFlags,point);,为吹泡泡程序添加非模态对话框(3),L

12、RESULT CMyWnd:OnDialog(WPARAM wParam,LPARAM lParam)switch(wParam)case IDOK:m_nr=m_pd-m_edit;m_pd-DestroyWindow();delete m_pd;m_pd=NULL;break;case IDC_BUTTON1:m_nr=m_pd-m_edit;break;Invalidate();return 0;,4.4公用对话框,MFC为公用对话框提供的对话框类:CColorDialog(颜色选择对话框类)CFileDialog(文件选择对话框类)CFindReplaceDialog(文件查找和替换对

13、话框类)CFontDialog(字体选择对话框类)CPrintDialog(打印和打印设置对话框类)它们均是CDialog类的派生类,封装了公用对话框的功能。这些类的说明均在afxdlgs.h中,在编程时要在程序首部加上文件包含命令:#include,颜色选择对话框,Color对话框的创建与一般的对话框没什么两样:首先是构建一个CColorDialog对象,然后调用ColorDialog:DoModal()来启动对话框。CColorDialog的构造函数为:CColorDialog(COLORREF clrInit=0,DWORD dwFlags=0,CWnd*pParentWnd=NULL)

14、;参数clrInit用来指定初始的颜色选择,dwFlags用来设置对话框,pParentWnd用于指定对话框的父窗口或拥有者窗口。根据DoModal()返回的是IDOK还是IDCANCEL,可知用户是否确认了对颜色的选择。DoModal()返回后,调用CColorDialog:GetColor()可以返回一个COLORREF类型的结果来指示在对话框中选择的颜色。COLORREF是一个32位的值,用来说明一个RGB颜色。GetColor返回的COLORREF的格式是0 x00bbggrr,即低位三个字节分别包含了蓝、绿、红三种颜色的强度。,文件选择对话框(1),文件选择对话框的创建过程:首先是构

15、建一个CFileDialog对象,然后调用CFileDialog:DoModal()来启动对话框。文件对话框的构造函数为:CFileDialog(BOOL bOpenFileDialog,LPCTSTR lpszDefExt=NULL,LPCTSTR lpszFileName=NULL,DWORD dwFlags=OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,LPCTSTR lpszFilter=NULL,CWnd*pParentWnd=NULL);如果参数bOpenFileDialog的值为TRUE,将创建Open(打开文件)对话框,否则就创建Save As(保存

16、文件)对话框。参数lpszDefExt用来指定缺省的文件扩展名。lpszFileName用于规定初始文件名。dwFlags用于设置对话框的一些属性。lpszFilter指向一个过滤字符串,用户如果只想选择某种或某几种类型的文件,就需要指定过滤字符串。参数pParentWnd是指向父窗口或拥有者窗口的指针。,文件选择对话框(2),过滤字符串有特定的格式,它实际上是由多个子串组成,每个子串由两部分组成,第一部分是过滤器的字面说明,如“Text file(*.txt)”,第二部分是用于过滤的匹配字符串,如“*.txt”,子串的两部分用竖线字符“|”分隔开。各子串之间也要用“|”分隔,且整个串的最后两

17、个字符必须是两个连续的竖线字符“|”。一个典型的过滤字符串如下面所示:char szFilter=“All files(*.*)|*.*|Text files(*.txt)|*.txt|Word documents(*.doc)|*.doc|”;若CFileDialog:DoModal返回的是IDOK,那么可以用CFileDialog类的成员函数来获取与所选文件有关的信息。GetPathName 返回一个包含有全路径文件名的CString对象GetFileName 返回一个包含有文件名(不含路径)的CString对象GetFileExt 返回一个只含文件扩展名的CString对象GetFile

18、Title 返回一个只含文件名(不含扩展名)的CString对象,文件查找和替换对话框(1),CFindReplaceDialog类用于实现Find(搜索)和Replace(替换)对话框,这两个对话框都是非模态对话框,用于在正文中搜索和替换指定的字符串。由于Find和Replace对话框是非模式对话框,它们的创建方式与其它四类公用对话框不同。CFindReplaceDialog对象是用new操作符创建,要启动Find/Replace对话框,应该调用CFindReplaceDialog:Create()函数,而不是DoModal()。Find/Replace对话框与其它公用对话框的另一个不同之处

19、在于它在工作过程中可以重复同一操作而对话框不被关闭,这就方便了频繁的搜索和替换。CFindReplaceDialog类只提供了一个界面,它并不会自动实现搜索和替换功能。CFindReplaceDialog使用了一种特殊的通知机制,当用户按下了操作的按钮后,它会向父窗口发送一个通知消息,父窗口应在该消息的消息处理函数中实现搜索和替换。,文件查找和替换对话框(2),Create函数的声明是:BOOL Create(BOOL bFindDialogOnly,LPCTSTR lpszFindWhat,LPCTSTR lpszReplaceWith=NULL,DWORD dwFlags=FR_DOWN,

20、CWnd*pParentWnd=NULL);当参数bFindDialogOnly的值为TRUE时,创建的是Find对话框,为FALSE时创建的是Replace对话框。参数lpszFindWhat指定了要搜索的字符串,lpszReplaceWith指定了用于替换的字符串。参数dwFlags用来设置对话框,其缺省值是FR_DOWN(向下搜索),该参数可以是几个FR_XXX常量的组合,用户可以通过该参数来决定诸如是否要显示Match case、Match Whole Word检查框等设置。参数pParentWnd指明了对话框的父窗口或拥有者窗口。,文件查找和替换对话框(3),CFindReplace

21、Dialog类提供了一组成员函数用来获得与用户操作有关的信息:FindNext 如果用户单击了Findnext按钮,该函数返回TRUE。GetNotifier 返回一个指向当前CFindReplaceDialog对话框的指针。GetFindString 返回一个包含要搜索字符串的CString对象。GetReplaceString 返回一个包含替换字符串的CString对象。IsTerminating 如果对话框终止了,则返回TRUE。MatchCase 如果选择了对话框中的Match case检查框,则返回TRUE。MatchWholeWord 如果选择了对话框中的Match Whole W

22、ord检查框,则返回TRUE。ReplaceAll 如果用户单击了Replace All按钮,该函数返回TRUE。ReplaceCurrent 如果用户单击了Replace按钮,该函数返回TRUE。SearchDown 返回TRUE表明搜索方向向下,返回FALSE则向上。,字体选择对话框(1),CFontDialog类支持Font(字体)对话框,用来让用户选择字体。Font对话框的创建过程与Color对话框类似,首先是构建一个CFontDialog对象,然后调用CFontDialog:DoModal()来启动对话框。CFontDialog类的构造函数如下所示CFontDialog(LPLOGF

23、ONT lplfInitial=NULL,DWORD dwFlags=CF_EFFECTS|CF_SCREENFONTS,CDC*pdcPrinter=NULL,CWnd*pParentWnd=NULL);参数lplfInitial指向一个LOGFONG结构,用来初始化对话框中的字体设置。dwFlags用于设置对话框属性。pdcPrinter指向一个代表打印机的CDC对象,若设置该参数,则选择的字体就为打印机所用。pParentWnd用于指定对话框的父窗口或拥有者窗口。,字体选择对话框(2),若DoModal()返回IDOK,那么可以调用CFontDialog的成员函数来获得所选字体的信息:G

24、etCurrentFont 用来获得所选字体的属性。该函数有一个参数,该参数是指向LOGFONT结构的指针,函数将所选字体的各种属性写入这个LOGFONT结构中。GetFaceName 返回一个包含所选字体名字的CString对象。GetStyleName 返回一个包含所选字体风格名字的CString对象。GetSize 返回所选字体的尺寸(以10个象素为单位)。GetColor 返回一个含有所选字体的颜色的COLORREF型值。GetWeight 返回所选字体的权值。IsStrikeOut 若用户选择了空心效果则返回TRUE,否则返回FALSE。IsUnderline 若用户选择了下划线效果

25、则返回TRUE,否则返回FALSE。IsBold 若用户选择了黑体风格则返回TRUE,否则返回FALSE。IsItalic 若用户选择了斜体风格则返回TRUE,否则返回FALSE。,打印和打印设置对话框(1),CPrintDialog类支持Print(打印)和Print Setup(打印设置)对话框,通过这两个对话框用户可以进行与打印有关的操作。Print和Print Setup对话框的创建过程与Color对话框类似。该类的构造函数是:CPrintDialog(BOOL bPrintSetupOnly,DWORD dwFlags=PD_ALLPAGES|PD_USEDEVMODECOPIES|

26、PD_NOPAGENUMS|PD_HIDEPRINTTOFILE|PD_NOSELECTION,CWnd*pParentWnd=NULL);参数bPrintSetupOnly的值若为TRUE,则创建的是Print对话框,否则,创建的是Print Setup对话框。dwFlags用来设置打印范围,缺省设置是打印出全部页,禁止From和To编辑框(即不用确定要打印的页的范围),PD_USEDEVMODECOPIES使对话框判断打印设备是否支持多份拷贝和校对打印(Collate),若不支持,就禁止相应的编辑控件和Collate检查框。pParentWnd用来指定对话框的父窗口或拥有者窗口。,打印和打

27、印设置对话框(2),程序可以调用CPrintDialog的成员函数来获得打印参数:GetCopies 返回要求的拷贝数。GetDefaults 返回缺省打印机的缺省设置(放在m_pd数据成员中)。GetDeviceName 返回一个包含有打印机设备名的CString对象。GetDevMode 返回一个指向DEVMODE结构的指针,用来查询打印机的设备初始化信息和设备环境信息。GetDriverName 返回一个包含有打印机驱动程序名的CString对象。GetFromPage 返回打印范围的起始页码。GetToPage 返回打印范围的结束页码。GetPortName 返回一个包含有打印机端口名的CString对象。GetPrinterDC 返回所选打印设备的一个 HDC 句柄。PrintAll 若要打印文档的所有页则返回TRUE。PrintCollate 若用户选择了Collate Copies检查框,则返回TRUE。PrintRange 如果用户要打印文档的一部分页,则返回TRUE。PrintSelection 若用户想打印当前选择的部分文档,则返回TRUE。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号