《程序设计教程对话框设计和Windows常用控件.pptx》由会员分享,可在线阅读,更多相关《程序设计教程对话框设计和Windows常用控件.pptx(63页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2.对话框分类对话框的分类主要有以下两种:模式(Model)对话框和非模式(Modeless)对话框。对于模式对话框,在对话框关闭之前,用户无法在同一应用程序的其他地方进行工作,如Microsoft Word中的“打开文件”对话框。而对于非模式对话框,在它仍然保留在屏幕上的同时,用户可以在同一应用程序的其他窗口中进行工作,如Microsoft Word 中的“查找与替换”对话框,在对话框保留在屏幕的同时,还可以进行光标的重定位及其他操作。第1页/共63页4.2 创建对话框程序在Visual C+6.0中创建对话框应用程序一般分为4个步骤:(1)利用资源编辑器创建一个对话框模板,加入需要的控件并
2、设置对话框和控件的属性。(2)利用ClassWizard创建与对话框资源对应的CDialog的派生类。(3)编写创建对话框的代码,通常在响应某个菜单项或者工具栏按钮时弹出对话框。(4)为对话框的控件添加响应的消息处理。第2页/共63页4.2.1 建立对话框程序框架在MFC应用程序中添加对话框资源,通常按下列步骤进行:(1)利用MFC AppWizard向导生成单文档(SDI)应用程序DialogTest。选择“插入”“资源”命令,或使用Ctrl+R组合键打开“插入资源”对话框。展开资源列表中的“Dialog”项,如图4-1所示,“资源类型”列表中列出了各种类型的对话框资源。第3页/共63页第4
3、页/共63页(2)单击“新建”按钮可以创建一个资源类型列表中指定类型的新资源;单击“定制”按钮可以创建资源类型列表中没有的新类型的资源;单击“导入”按钮可以将外部已有的位图、图标等资源添加到当前应用程序中。(3)修改对话框属性。在对话框模板的空白处右击,从弹出的快捷菜单中选择“属性”命令,弹出如图4-3的“对话属性”对话框。第5页/共63页对话框的属性有“常规”、“样式”、“更多样式”、“扩展样式”和“更多扩展样式”5个部分,这里只介绍最常用的“常规”属性,其中各个属性说明如表4-2所示。根据需要设置各项属性即可。第6页/共63页4.2.2 创建对话框类在创建了对话框模板后,就可以利用Clas
4、sWizard来创建从CDialog派生且连接到对话框模板的对话框类了,并可以添加与控件相关联的成员变量。需要注意的是,无论在创建对话框类之前还是之后,都可以向对话框资源添加控件,但只有在创建对话框类之后,才可以为对话框添加与控件关联的成员变量和消息处理函数。第7页/共63页4.2.3 了解对话框常用函数CDialog类是对话框的基类,用户在程序中创建的对话框类一般都是CDialog类的派生类。CDialog类从CWnd类派生而来,所以它继承了CWnd类的成员函数,用户在编写对话框程序时除了使用CDialog类的成员函数之外,还可以调用CWnd类的一些成员函数进行对话框的管理。对话框常用的成员
5、函数主要有以下几个:第8页/共63页1.DoModal该方法用于创建并显示一个模式对话框,其原型如下:virtual int DoModal();返回值:该方法返回一个整数值,该数值可以应用于EndDialog方法。如果返回值为-1,则表示没有创建对话框;如果为IDABORT,则表示有其他错误发生。2.Create该方法从对话框模板中创建一个对话框资源,其原型如下:BOOL Create(LPCTSTR lpszTemplateName,CWnd*pParentWnd=NULL);BOOL Create(UINT nIDTemplate,CWnd*pParentWnd=NULL);3.EndD
6、ialog该函数用于退出一个模式对话框,返回nResult作为DoModal的返回值,其原型如下:void EndDialog(int nResult);第9页/共63页4.OnCancel该函数在单击对话框中的“Cancel”按钮或按Esc键时由框架调用,其原型如下:virtual void OnCancel();5.OnInitDialog该重载函数用于响应WM_INTTDIALOG消息,对对话框进行初始化处理,其原型如下:virtual BOOL OnInitDialog();返回值:返回非零值,输入焦点为第一个控件。若程序已显式地设置焦点到某个控件处,则返回零。6.OnOK单击ID为I
7、DOK的按钮时调用的函数,关闭对话框,并返回IDOK,其原型如下:virtual void OnOK();第10页/共63页4.3 使用Windows常用控件为了与用户进行直观、方便、快捷的交互,Windows操作系统提供了各种控件。控件(Control)是一种子窗口,应用程序用它来与其他窗口进行简单的交互。一般情况下,在使用对话框的时候都需要加上对话框控件,如编辑框、组合框、按钮和单选按钮等。第11页/共63页4.3.1 Windows常用控件介绍1.静态文本控件(CStatic)静态文本控件用来在屏幕上显示字符串,一般不响应消息,在运行过程中不和用户发生任何关系。当把矩形范围定位好之后,就
8、可以直接输入文本。该控件的一个常用属性是标题(Caption)属性,用来设置在控件中显示的文本。在很多情况下,对话框中的一些说明性质的文字均可以用静态文本进行输出。管理静态文本控件的MFC类是CStatic类。第12页/共63页2.编辑框控件(CEdit)编辑框控件是一个让用户从键盘输入和编辑文字的矩形窗口。同时,用户也可以使用编辑框控件来编辑或修改简单的文本文件。编辑框一般和静态文本控件一起使用,当它获得焦点时,框内会出现一个闪动的插入符。3.按钮控件(CEdit)在Windows中按钮是随处可见的,其中常见的按钮有3种类型:按键按钮、单选按钮和复选框。按键按钮通常可以立即产生某个动作,执行
9、某个命令,因此也常被称为命令按钮。单选按钮的外观是一个圆圈,当它被选中时,单选按钮中就标上一个黑点。复选框的外观是一个空心方框,当它被选中时,复选框中就加上一个对勾标记,通常复选框只有选中和没有选中两种状态。第13页/共63页4.列表框控件(CListBox)列表框是一种输入控制,它可以使用户从所列的表项中进行选择。用户可以在其中选择一个或多个项,这与单选按钮和复选框的功能有些相近,但不同的是,列表框中项的数目是灵活变化的,程序运行时可往列表框中添加或删除某些项。并且,当列表框中项的数目较多不能一次全部显示时,还可以通过滚动条来拓展显示范围。第14页/共63页5.组合框控件组合框是列表框和编辑
10、框的组合。在组合框中,用户除了可以在列表中对已经存在的选项进行选择外,还可以输入新的选项。Windows提供了3种类型的组合框:简单组合框(Simple)、下拉式组合框(Dropdown)和下拉式列表框(Drop List)。简单组合框和下拉式组合框都含有列表框和编辑框控件,只不过简单组合框的列表框不是下拉式的,跟正常的列表框一样。下拉式列表框则虽然有下拉式的列表,但却没有文字编辑功能。第15页/共63页6.滚动条控件滚动条是窗口中常见的对象,当窗口客户区中要显示比其自身大的对象时,滚动条便非常有用了。这种滚动条与窗口一同创建,位于窗口用户区旁的非用户区,用来扩展用户区的显示范围,它被称为标准
11、滚动条。另外,还有一种作为控件的滚动条,这是一个独立的窗口,具有直接的输入焦点,使用这种滚动条的目的未必是滚动显示窗口内容。第16页/共63页4.3.2 添加Windows控件控件的创建方法有两种,一种是在对话框中指定控件,即将控件的父窗口指定为对话框,当程序启动该对话框时,Windows系统自动为对话框创建控件,当关闭对话框时,Windows所创建的控件也随之被撤销。另一种是将控件看作是任意窗口的子窗口,通过调用相应的创建函数来实现。第17页/共63页1.通过资源编辑器添加控件打开对话框资源编辑器弹出如图48所示的控件工具栏之后,就可以方便地在对话框中添加各种控件了。(1)单击添加:在控件工
12、具栏上单击要添加的控件后,将鼠标移动到对话框模板上,此时鼠标光标变成了“+”形状,在对话框上再次单击鼠标,控件就添加到对话框模板上了。(2)拖动添加:拖动要添加的控件到对话框模板上,然后释放鼠标,也可以添加控件。第18页/共63页2.调用创建函数添加控件如果希望在程序的运行过程中在对话框中添加控件,一般需要先声明一个MFC控件类的对象,然后调用Create()函数和其他成员函数显示控件和设置属性。Create()是CWnd的成员函数,其原型如下:virtual BOOL Create(LPCTSTR lpszClassName,LPCTSTR lpszWindowName,DWORD dwSt
13、yle,Const RECT&rect,CWnd*pParentWnd,UINT nID,CCreateContext*pContext=NULL);第19页/共63页4.3.3 修改Windows控件属性1.控件ID 每个控件都有一个ID标识,系统给添加的每个控件指定了一个默认的ID标识,用户可以根据需要对其进行修改,以便更清楚地表达出控件的作用。控件ID以IDC_开头,命名ID时最好包括控件类型,例如,IDC_BUTTON前缀用于按钮,IDC_EDIT前缀用于编辑框。ID可以由字母、数字及下划线字符组成,且必须以字母或下划线字符开头。MFC约定ID中的字母全部大写。第20页/共63页2.标
14、题属性静态文本、组框、命令按钮以及单选按钮等控件都可以显示标题,用来对控件进行文字说明。控件标题中的字符“&”使紧跟其后的字符附带下划线,按Alt+下划线上的字符将启动该控件。若控件是一个单选按钮,则按Alt+下划线上的字符将选择该按钮;若控件是命令按钮,则将激活按钮命令;若控件是一个静态文本,则将激活紧随其后的下一个控件。第21页/共63页3.制表站属性该属性控制利用键盘Tab键获取对话框窗口的操作焦点,获得焦点的控件能够响应当前的键盘输入。控件获得焦点后,按Enter键就执行控件所对应的命令。任何对话框中都只能由一个控件拥有焦点。第22页/共63页4.组属性组属性用来对一组控件进行编组,用
15、户可以用键盘方向键在该组控件内切换焦点。组属性常用于单选按钮和复选框,在同一组内的单选按钮具有互斥的特性,即在这些单选按钮中只能有一个是选中的。如果一个控件具有Group属性,则这个控件以及按Tab顺序紧随其后的所有控件都属于一组,直到遇到另一个有Group属性的控件为止。第23页/共63页4.4 对控件进行排版在实际编程中,有时会根据需要在对话框中加入多个控件,这时就需要对控件进行适当的排版以使对话框更加美观。控件布局可以利用如图4-11所示的布局菜单,或者利用如图4-12所示的控件布局工具栏来实现。要注意的是,布局菜单和布局工具栏只有在对对话框资源进行编辑时才有效,对其他资源进行编辑时无效
16、。第24页/共63页第25页/共63页4.4.1 设置Windows控件的大小如果要设置控件的大小,可以利用控件周围的尺寸调整点实现,如图4-13所示,可看到控件周围有8个调整点。特别地,对于静态文本控件,当输入标题内容时,控件的大小会自动改变。调整控件大小的具体方法如下:第26页/共63页第27页/共63页(1)单击要调整的控件并将其选中,此时控件四周显示出尺寸调整点。(2)把鼠标光标放在调整点上,当鼠标变为双向箭头时,水平或垂直拖动鼠标以改变控件的宽度或者高度。如果希望能等比例地改变控件的宽度和高度,可以把鼠标光标放在右下脚的调整点位置进行拖动。(3)调整为满意大小时停止拖动即可。第28页
17、/共63页4.4.2 设置Windows控件的对齐模式为了使程界面更加美观,有时需要对多个控件进行对齐排列,此时同样可以使用布局菜单或者控件布局工具栏来实现,具体方法如下:(1)选中需要对齐的多个控件。(2)选择“排列”菜单的下一级菜单中的选项进行设置,可以进行的对齐方式有居左对齐、居右对齐、顶端对齐、底部对齐、水平居中和垂直居中。也可以使用控件布局工具栏中的工具按钮实现相同的功能。第29页/共63页提示:当选中多个控件进行对齐设置时,在“排列”菜单的下一级菜单子菜单中选择居左对齐、居右对齐、顶端对齐或者底部对齐后,所有控件都按照选中控件中最先添加的控件进行调整。当选择水平居中或者垂直居中时,
18、是指所有选中的控件相对于对话框水平居中或者垂直居中。第30页/共63页4.5 模式对话框和非模式对话框对话框主要分为模式对话框和非模式对话框两类,它们在程序中的应用非常广泛,利用这两种对话框可以方便地实现信息的交互。第31页/共63页4.5.1 模式对话框和非模式对话框概述模式对话框是最常用的一类对话框,用户可以通过选择菜单选项或单击工具按钮打开一个对话框,然后进行数据的输入操作。对于模式对话框的编程可以按以下步骤进行。第32页/共63页(1)根据要求创建对话框模板。(2)使用ClassWizard创建对话框类并进行各类事件函数的代码编写。(3)对视图类进行编辑,以便对话框能够被激活。在所编写
19、的代码中,首先创建对话框类的对象,然后通过该对象调用对话框类成员函数DoModal()。只有当用户退出对话框窗口时,DoModal函数才能返回。第33页/共63页4.5.2 创建模式对话框创建模式对话框需要调用CDialog类的成员函数DoModal(),该函数的功能就是创建并显示一个模式对话框,其返回值将作为CDialog类的另一个成员函数EndDialog的参数,后者的功能是关闭模式对话框。下面通过一个例子来看一下模式对话框的创建过程。第34页/共63页void CMyboleView:OnDialogTest()CTestDlg dlg dlg.DoModal();上述代码中首先定义了一
20、个对话框对象dlg,然后调用DoModal()函数以产生一个模式对话框。需要注意的是,由于视类中并不知道这个CTestDlg对话框是什么样的数据类型,因此应该在视类的源文件中包含这个CTestDlg类的头文件,即在视类的源文件中加入如下语句:#include testdlg.h第35页/共63页4.5.3 创建非模式对话框程序相对于模式对话框,创建非模式对话框相对复杂,需要调用Create()和ShowWindow()函数。Create()函数具有以下两种形式的声明:BOOL CDialog:Create(LPCTSTR lpszTemplateName,CWnd*pParent=NULL);
21、BOOL CDialog:Create(UINT nIDTemplate,CWnd*pParentWnd=NULL);第36页/共63页利用Create()函数创建非模态对话框后,还需要调用ShowWindow()函数将这个对话框显示出来,其函数原型如下:BOOL CDialog:ShowWindow(SW_SHOW);第37页/共63页如果要销毁对话框对象,可以通过以下两种方法实现:(1)在对话框退出时销毁对象。重载OnOK与OnCancel函数,在函数中调用父类的同名函数,然后调用DestroyWindow()函数强制销毁窗口,在对话框中映射WM_DESTROY消息,在消息处理函数中调用d
22、elete this,强行删除自身对象。(2)通过向父窗口发送消息,要求其他窗口对其进行销毁。首先需要定义一个消息用于进行通知,然后在对话框中映射WM_DESTROY消息,在消息处理函数中调用消息发送函数通知其他窗口。在接收消息的窗口中利用ON_MESSAGE映射处理消息的函数,并在消息处理函数中删除对话框对象。第38页/共63页4.6 Windows通用对话框在使用Windows的过程中,用户经常会遇到一些常用的有特定用途的对话框,如文件打开对话框、设置字体对话框等。这样的对话框使用非常频繁,为了使用户不必自己设计该类型的对话框,Windows提供了一组标准用户界面对话框,它们都由MFC库中
23、相应的类来支持,可以用来执行各种标准操作,如选择文件、指定字体和选择颜色等。第39页/共63页4.6.1 CFontDialog对话框CFontDialog类封装了标准的字体对话框,使用户可以从系统安装的字体列表中选择要用的字体,图4-16即是一个“字体”对话框。“字体”对话框的创建与一般的对话框基本一样,首先是构建一个CFontDialog对象,然后调用CFontDialog:DoModal()函数来启动对话框。第40页/共63页第41页/共63页CFontDialog类的构造函数如下:CFontDialog(LPLOGFONT lplfInitial=NULL,DWORD dwFlags=
24、CF_EFFECTS|CF_SCREENFONTS,CDC*pdcPrinter=NULL,CWnd*pParentWnd=NULL);第42页/共63页4.6.2 CFileDialog对话框很多Windows应用程序都具有打开文件和文件另存为功能,这两项功能都需要使用对话框以获取要打开的文件名或欲保存的文件名。CFileDialog类允许编程人员在程序中嵌入通用文件对话框,以实现Windows标准的“打开”和“另存为”对话框。第43页/共63页CFileDialog类的构造函数如下:CFileDialog(BOOL bOpenFileDialog,LPCTSTR lpszDefExt=NU
25、LL,LPCTSTR lpszFileName=NULL,DWORD dwFlags=OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,LPCTSTR lpszFilter=NULL,CWnd*pParentWnd=NULL)第44页/共63页4.6.3 CColorDialog对话框CColorDialog类用于实现颜色通用对话框,使用户可以从颜色列表中选择要用的颜色。CColorDialog类的构造函数的格式为:CColorDialog(COLORREF clrInit=0,DWORD dwFlags=0,CWnd*pParentWnd=NULL);显示颜色对话框的
26、方法同显示其他通用对话框一样,都是先定义对象,然后调用DoModal()函数,根据DoModal()函数返回的是IDOK还是IDCANCEL可知道用户是否确认了对颜色的选择。DoModal()函数返回后,调用CColorDialog:GetColor()方法可以返回一个COLORREF类型的结果来指示在对话框中选择的颜色。除此之外,也可以利用CColorDialog类中类型为CHOOSECOLOR的成员变量m_cc获取选择的颜色值。第45页/共63页4.6.4 CPrintDialog对话框CPrintDialog类支持Print(打印)和Print Setup(打印设置)对话框,通过这两个对
27、话框用户可以进行与打印有关的操作。打印设置允许用户指定打印时的特殊设置,并将自动处理安装在用户系统上的打印机特殊项。第46页/共63页CPrintDialog类的构造函数如下所示:CPrintDialog(BOOL bPrintSetupOnly,DWORD dwFlags=PD_ALLPAGES|PD_USEDEVMODECOPIES|PD_NOPAGENUMS|PD_HIDEPRINTTOFILE|PD_NOSELECTION,CWnd*pParentWnd=NULL);第47页/共63页4.6.5CFindReplaceDialog对话框CFindReplaceDialog类用于实现Fi
28、nd(查找)和Replace(替换)对话框。创建的对话框仅仅提供了标准接口,它允许输入待查找和替换的字符串,而真正的查找和替换功能则需要程序员自己来实现。与其他通用对话框不同的是,查找和替换对话框是非模式的,因此,对该类的使用要按照非模式对话框进行。第48页/共63页由于“查找和替换”对话框是非模式对话框,它的创建方式与其他4类公用对话框不同。CFindReplaceDialog对象是用new操作符在堆中创建的,而不是像普通对话框那样以变量的形式创建。要启动“查找和替换”对话框,应该调用CFindReplaceDialog:Create()函数,而不是调用DoModal()函数。Create(
29、)函数的声明如下:BOOL Create(BOOL bFindDialogOnly,LPCTSTR lpszFindWhat,LPCTSTR lpszReplaceWith=NULL,DWORD dwFlags=FR_DOWN,CWnd*pParentWnd=NULL);第49页/共63页CFindReplaceDialog类只提供了一个界面,它并不会自动实现搜索和替换功能。该类使用了一种特殊的通知机制,当用户按下了操作的按钮后,它会向父窗口发送一个通知消息,父窗口应在该消息的消息处理函数中实现搜索和替换。CFindReplaceDialog类提供了一组成员函数用来获得与用户操作有关的信息,如
30、表4-12所示,这组函数一般应在通知消息处理函数中调用。第50页/共63页第51页/共63页4.7 编程实例对话框和控件使用综合实例1.编程要求建立一单文档应用程序,运行该程序时首先出现登录对话框,输入的用户名和密码正确后方可进入程序运行界面。为程序添加“控件演示”主菜单,并为其添加“按钮示例”、“列表框示例”两个子菜单项。编写两个子菜单项的消息处理函数,使“按钮示例”演示如何使用单选按钮控制图片变换,“列表框示例”演示如何使用列表框选择不同的控件选项,然后动态生成并显示。第52页/共63页2.编程实现(1)新建SDI项目。启动Microsoft Visual C+6.0,单击“文件”“新建”
31、命令,在弹出的“新建”对话框中切换到“工程”选项卡,并选择“MFC AppWizardexe”选项,在工程名称文本框中输入“DialogControl”,然后单击“确定”按钮。在弹出的对话框中选择“单文档”单选按钮,其他采取默认设置,然后单击“下一步”按钮。以后设置均采用向导默认设置,直至完成。第53页/共63页(2)添加菜单。展开工作区的ResourceView页面下的Menu文件夹,双击IDR_MAINFRAME,然后双击弹出窗口中的主菜单上的虚线框,弹出“菜单项目属性”对话框,设置主菜单,标题设为“控件演示”。此时,选中“弹出”复选框表示其有下拉菜单。双击其下拉菜单上的虚线框,添加两个子
32、菜单,标题分别为“按钮示例”和“组合框示例”,ID分别是“ID_BUTTON_TEST”和“ID_COMBO_TEST”。第54页/共63页(3)添加3个对话框资源。右击Dialog文件夹,在弹出的快捷菜单中选择“插入dialog”命令。在弹出的对话框资源上右击并选择“属性”命令。在弹出的“对话属性”对话框中设置其ID为“IDD_IDENTITY”,标题为“身份验证”。用同样的方法创建“按钮测试”和“组合框测试”对话框,其ID分别为“IDD_BUTTONTEST”和“IDD_COMBOTEST”。第55页/共63页(4)为对话框添加类。以“身份验证”对话框为例,选中该对话框,按Ctrl+W组合
33、键,弹出“Adding a Class”对话框,单击“OK”按钮,在弹出的“new class”对话框中设置其类名为“CDlgIdentity”。使用同样的方法为“按钮测试”和“组合框测试”对话框添加类“CDlgButton”和“CDlgCombo”。(5)按图4-21、图4-22和图4-23的布局分别为3个对话框添加控件,并按表413所示对控件的属性进行设置。第56页/共63页第57页/共63页(6)按Ctrl+W组合键,打开ClassWizard,切换到MemberVariables页面,为“身份验证”对话框中的控件IDC_EDIT_USER和IDC_EDIT_PASSWORD分别添加类型
34、为CString的成员变量m_strUser和m_strPassword。(7)在CDialogControlApp类中找到InitInstance()函数,该函数负责应用程序的初始化工作,如初始化数据、创建文档模板(与文档、视图和框架窗口相关联)、显示应用程序主窗口等。为了使主窗口出现前先出现身份验证对话框,将下面身份验证部分的代码加入到此函数中。(8)为“按钮测试”和“组合框测试”菜单项分别添加菜单事件处理程序。由于只需要完成弹出对话框的操作,因此把处理程序映射到框架类CMainFrame中,并在该类中添加对两个对话框头文件的引用。第58页/共63页(9)在“按钮测试”对话框模板中执行“插
35、入”“资源”命令,弹出“插入资源”对话框,通过“引入”命令添加两个位图资源。在“按钮测试”对话框中选中图像控件,打开图像属性对话框,选中刚才导入的一个位图。通过ClassWizard为图像控件添加一个变量m_cBmp,在Category中选择Control,在Variable type中选择Cstatic类。分别双击两个单选按钮,为其添加BN_CLICKED消息处理函数。(10)在“组合框测试”对话框模板中选中组合框控件,打开属性对话框,在“数据”页面(如图4-26所示)依次输入初始列表项,每输入一项,按Ctrl+Enter组合键换行。然后在“样式”页面下取消“分类”属性。第59页/共63页第60页/共63页利用ClassWizard在对话框类中为组合框控件IDC_COMBO_CONTROL添加消息CBN_SELCHANGE的消息处理函数,当组合框中的当前选项发生变化时调用该函数。为了在退出该函数后在对话框中保留所创建的控件,使用new运算符在内存中创建控件对象,然后调用成员函数Create()在对话框指定位置(通过CRect参数)创建并显示控件。注意:在每一次创建一个新的控件之前,必须使用delete运算符将上一次创建的控件删除。第61页/共63页本章结束第62页/共63页感谢您的观看!第63页/共63页