程序设计教程对话框设计和Windows常用控件_第1页
程序设计教程对话框设计和Windows常用控件_第2页
程序设计教程对话框设计和Windows常用控件_第3页
程序设计教程对话框设计和Windows常用控件_第4页
程序设计教程对话框设计和Windows常用控件_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

会计学1程序设计教程对话框设计和Windows常用控件2.对话框分类对话框的分类主要有以下两种:模式(Model)对话框和非模式(Modeless)对话框。对于模式对话框,在对话框关闭之前,用户无法在同一应用程序的其他地方进行工作,如MicrosoftWord中的“打开文件”对话框。而对于非模式对话框,在它仍然保留在屏幕上的同时,用户可以在同一应用程序的其他窗口中进行工作,如MicrosoftWord中的“查找与替换”对话框,在对话框保留在屏幕的同时,还可以进行光标的重定位及其他操作。第1页/共63页4.2创建对话框程序在VisualC++6.0中创建对话框应用程序一般分为4个步骤:(1)利用资源编辑器创建一个对话框模板,加入需要的控件并设置对话框和控件的属性。(2)利用ClassWizard创建与对话框资源对应的CDialog的派生类。(3)编写创建对话框的代码,通常在响应某个菜单项或者工具栏按钮时弹出对话框。(4)为对话框的控件添加响应的消息处理。第2页/共63页4.2.1建立对话框程序框架在MFC应用程序中添加对话框资源,通常按下列步骤进行:(1)利用MFCAppWizard向导生成单文档(SDI)应用程序DialogTest。选择“插入”→“资源”命令,或使用Ctrl+R组合键打开“插入资源”对话框。展开资源列表中的“Dialog”项,如图4-1所示,“资源类型”列表中列出了各种类型的对话框资源。第3页/共63页第4页/共63页(2)单击“新建”按钮可以创建一个资源类型列表中指定类型的新资源;单击“定制”按钮可以创建资源类型列表中没有的新类型的资源;单击“导入”按钮可以将外部已有的位图、图标等资源添加到当前应用程序中。(3)修改对话框属性。在对话框模板的空白处右击,从弹出的快捷菜单中选择“属性”命令,弹出如图4-3的“对话属性”对话框。第5页/共63页对话框的属性有“常规”、“样式”、“更多样式”、“扩展样式”和“更多扩展样式”5个部分,这里只介绍最常用的“常规”属性,其中各个属性说明如表4-2所示。根据需要设置各项属性即可。第6页/共63页4.2.2创建对话框类在创建了对话框模板后,就可以利用ClassWizard来创建从CDialog派生且连接到对话框模板的对话框类了,并可以添加与控件相关联的成员变量。需要注意的是,无论在创建对话框类之前还是之后,都可以向对话框资源添加控件,但只有在创建对话框类之后,才可以为对话框添加与控件关联的成员变量和消息处理函数。第7页/共63页4.2.3了解对话框常用函数CDialog类是对话框的基类,用户在程序中创建的对话框类一般都是CDialog类的派生类。CDialog类从CWnd类派生而来,所以它继承了CWnd类的成员函数,用户在编写对话框程序时除了使用CDialog类的成员函数之外,还可以调用CWnd类的一些成员函数进行对话框的管理。对话框常用的成员函数主要有以下几个:第8页/共63页1.DoModal该方法用于创建并显示一个模式对话框,其原型如下:

virtualintDoModal();返回值:该方法返回一个整数值,该数值可以应用于EndDialog方法。如果返回值为-1,则表示没有创建对话框;如果为IDABORT,则表示有其他错误发生。2.Create该方法从对话框模板中创建一个对话框资源,其原型如下:BOOLCreate(LPCTSTRlpszTemplateName,CWnd*pParentWnd=NULL);

BOOLCreate(UINTnIDTemplate,CWnd*pParentWnd=NULL);3.EndDialog该函数用于退出一个模式对话框,返回nResult作为DoModal的返回值,其原型如下:

voidEndDialog(intnResult);第9页/共63页4.OnCancel该函数在单击对话框中的“Cancel”按钮或按Esc键时由框架调用,其原型如下:

virtualvoidOnCancel();5.OnInitDialog该重载函数用于响应WM_INTTDIALOG消息,对对话框进行初始化处理,其原型如下:

virtualBOOLOnInitDialog();返回值:返回非零值,输入焦点为第一个控件。若程序已显式地设置焦点到某个控件处,则返回零。6.OnOK单击ID为IDOK的按钮时调用的函数,关闭对话框,并返回IDOK,其原型如下:

virtualvoidOnOK();第10页/共63页4.3使用Windows常用控件为了与用户进行直观、方便、快捷的交互,Windows操作系统提供了各种控件。控件(Control)是一种子窗口,应用程序用它来与其他窗口进行简单的交互。一般情况下,在使用对话框的时候都需要加上对话框控件,如编辑框、组合框、按钮和单选按钮等。第11页/共63页4.3.1Windows常用控件介绍1.静态文本控件(CStatic)静态文本控件用来在屏幕上显示字符串,一般不响应消息,在运行过程中不和用户发生任何关系。当把矩形范围定位好之后,就可以直接输入文本。该控件的一个常用属性是标题(Caption)属性,用来设置在控件中显示的文本。在很多情况下,对话框中的一些说明性质的文字均可以用静态文本进行输出。管理静态文本控件的MFC类是CStatic类。第12页/共63页2.编辑框控件(CEdit)编辑框控件是一个让用户从键盘输入和编辑文字的矩形窗口。同时,用户也可以使用编辑框控件来编辑或修改简单的文本文件。编辑框一般和静态文本控件一起使用,当它获得焦点时,框内会出现一个闪动的插入符。3.按钮控件(CEdit)在Windows中按钮是随处可见的,其中常见的按钮有3种类型:按键按钮、单选按钮和复选框。按键按钮通常可以立即产生某个动作,执行某个命令,因此也常被称为命令按钮。单选按钮的外观是一个圆圈,当它被选中时,单选按钮中就标上一个黑点。复选框的外观是一个空心方框,当它被选中时,复选框中就加上一个对勾标记,通常复选框只有选中和没有选中两种状态。第13页/共63页4.列表框控件(CListBox)列表框是一种输入控制,它可以使用户从所列的表项中进行选择。用户可以在其中选择一个或多个项,这与单选按钮和复选框的功能有些相近,但不同的是,列表框中项的数目是灵活变化的,程序运行时可往列表框中添加或删除某些项。并且,当列表框中项的数目较多不能一次全部显示时,还可以通过滚动条来拓展显示范围。第14页/共63页5.组合框控件组合框是列表框和编辑框的组合。在组合框中,用户除了可以在列表中对已经存在的选项进行选择外,还可以输入新的选项。Windows提供了3种类型的组合框:简单组合框(Simple)、下拉式组合框(Dropdown)和下拉式列表框(DropList)。简单组合框和下拉式组合框都含有列表框和编辑框控件,只不过简单组合框的列表框不是下拉式的,跟正常的列表框一样。下拉式列表框则虽然有下拉式的列表,但却没有文字编辑功能。第15页/共63页6.滚动条控件滚动条是窗口中常见的对象,当窗口客户区中要显示比其自身大的对象时,滚动条便非常有用了。这种滚动条与窗口一同创建,位于窗口用户区旁的非用户区,用来扩展用户区的显示范围,它被称为标准滚动条。另外,还有一种作为控件的滚动条,这是一个独立的窗口,具有直接的输入焦点,使用这种滚动条的目的未必是滚动显示窗口内容。第16页/共63页4.3.2添加Windows控件控件的创建方法有两种,一种是在对话框中指定控件,即将控件的父窗口指定为对话框,当程序启动该对话框时,Windows系统自动为对话框创建控件,当关闭对话框时,Windows所创建的控件也随之被撤销。另一种是将控件看作是任意窗口的子窗口,通过调用相应的创建函数来实现。第17页/共63页1.通过资源编辑器添加控件打开对话框资源编辑器弹出如图48所示的控件工具栏之后,就可以方便地在对话框中添加各种控件了。(1)单击添加:在控件工具栏上单击要添加的控件后,将鼠标移动到对话框模板上,此时鼠标光标变成了“+”形状,在对话框上再次单击鼠标,控件就添加到对话框模板上了。(2)拖动添加:拖动要添加的控件到对话框模板上,然后释放鼠标,也可以添加控件。第18页/共63页2.调用创建函数添加控件如果希望在程序的运行过程中在对话框中添加控件,一般需要先声明一个MFC控件类的对象,然后调用Create()函数和其他成员函数显示控件和设置属性。Create()是CWnd的成员函数,其原型如下:virtualBOOLCreate(LPCTSTRlpszClassName,LPCTSTRlpszWindowName,DWORDdwStyle,ConstRECT&rect,CWnd*pParentWnd,UINTnID,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.标题属性静态文本、组框、命令按钮以及单选按钮等控件都可以显示标题,用来对控件进行文字说明。控件标题中的字符“&”使紧跟其后的字符附带下划线,按Alt+下划线上的字符将启动该控件。若控件是一个单选按钮,则按Alt+下划线上的字符将选择该按钮;若控件是命令按钮,则将激活按钮命令;若控件是一个静态文本,则将激活紧随其后的下一个控件。第21页/共63页3.制表站属性该属性控制利用键盘Tab键获取对话框窗口的操作焦点,获得焦点的控件能够响应当前的键盘输入。控件获得焦点后,按Enter键就执行控件所对应的命令。任何对话框中都只能由一个控件拥有焦点。第22页/共63页4.组属性组属性用来对一组控件进行编组,用户可以用键盘方向键在该组控件内切换焦点。组属性常用于单选按钮和复选框,在同一组内的单选按钮具有互斥的特性,即在这些单选按钮中只能有一个是选中的。如果一个控件具有Group属性,则这个控件以及按Tab顺序紧随其后的所有控件都属于一组,直到遇到另一个有Group属性的控件为止。第23页/共63页4.4对控件进行排版在实际编程中,有时会根据需要在对话框中加入多个控件,这时就需要对控件进行适当的排版以使对话框更加美观。控件布局可以利用如图4-11所示的布局菜单,或者利用如图4-12所示的控件布局工具栏来实现。要注意的是,布局菜单和布局工具栏只有在对对话框资源进行编辑时才有效,对其他资源进行编辑时无效。第24页/共63页第25页/共63页4.4.1设置Windows控件的大小如果要设置控件的大小,可以利用控件周围的尺寸调整点实现,如图4-13所示,可看到控件周围有8个调整点。特别地,对于静态文本控件,当输入标题内容时,控件的大小会自动改变。调整控件大小的具体方法如下:第26页/共63页第27页/共63页(1)单击要调整的控件并将其选中,此时控件四周显示出尺寸调整点。(2)把鼠标光标放在调整点上,当鼠标变为双向箭头时,水平或垂直拖动鼠标以改变控件的宽度或者高度。如果希望能等比例地改变控件的宽度和高度,可以把鼠标光标放在右下脚的调整点位置进行拖动。(3)调整为满意大小时停止拖动即可。第28页/共63页4.4.2设置Windows控件的对齐模式为了使程界面更加美观,有时需要对多个控件进行对齐排列,此时同样可以使用布局菜单或者控件布局工具栏来实现,具体方法如下:(1)选中需要对齐的多个控件。(2)选择“排列”菜单的下一级菜单中的选项进行设置,可以进行的对齐方式有居左对齐、居右对齐、顶端对齐、底部对齐、水平居中和垂直居中。也可以使用控件布局工具栏中的工具按钮实现相同的功能。第29页/共63页提示:当选中多个控件进行对齐设置时,在“排列”菜单的下一级菜单子菜单中选择居左对齐、居右对齐、顶端对齐或者底部对齐后,所有控件都按照选中控件中最先添加的控件进行调整。当选择水平居中或者垂直居中时,是指所有选中的控件相对于对话框水平居中或者垂直居中。第30页/共63页4.5模式对话框和非模式对话框对话框主要分为模式对话框和非模式对话框两类,它们在程序中的应用非常广泛,利用这两种对话框可以方便地实现信息的交互。第31页/共63页4.5.1模式对话框和非模式对话框概述模式对话框是最常用的一类对话框,用户可以通过选择菜单选项或单击工具按钮打开一个对话框,然后进行数据的输入操作。对于模式对话框的编程可以按以下步骤进行。第32页/共63页(1)根据要求创建对话框模板。(2)使用ClassWizard创建对话框类并进行各类事件函数的代码编写。(3)对视图类进行编辑,以便对话框能够被激活。在所编写的代码中,首先创建对话框类的对象,然后通过该对象调用对话框类成员函数DoModal()。只有当用户退出对话框窗口时,DoModal函数才能返回。第33页/共63页4.5.2创建模式对话框创建模式对话框需要调用CDialog类的成员函数DoModal(),该函数的功能就是创建并显示一个模式对话框,其返回值将作为CDialog类的另一个成员函数EndDialog的参数,后者的功能是关闭模式对话框。下面通过一个例子来看一下模式对话框的创建过程。第34页/共63页voidCMyboleView::OnDialogTest(){CTestDlgdlgdlg.DoModal();}上述代码中首先定义了一个对话框对象dlg,然后调用DoModal()函数以产生一个模式对话框。需要注意的是,由于视类中并不知道这个CTestDlg对话框是什么样的数据类型,因此应该在视类的源文件中包含这个CTestDlg类的头文件,即在视类的源文件中加入如下语句:#include"testdlg.h"第35页/共63页4.5.3创建非模式对话框程序相对于模式对话框,创建非模式对话框相对复杂,需要调用Create()和ShowWindow()函数。Create()函数具有以下两种形式的声明:BOOLCDialog::Create(LPCTSTRlpszTemplateName,CWnd*pParent=NULL);BOOLCDialog::Create(UINTnIDTemplate,CWnd*pParentWnd=NULL);第36页/共63页利用Create()函数创建非模态对话框后,还需要调用ShowWindow()函数将这个对话框显示出来,其函数原型如下:BOOLCDialog::ShowWindow(SW_SHOW);第37页/共63页如果要销毁对话框对象,可以通过以下两种方法实现:(1)在对话框退出时销毁对象。重载OnOK与OnCancel函数,在函数中调用父类的同名函数,然后调用DestroyWindow()函数强制销毁窗口,在对话框中映射WM_DESTROY消息,在消息处理函数中调用deletethis,强行删除自身对象。(2)通过向父窗口发送消息,要求其他窗口对其进行销毁。首先需要定义一个消息用于进行通知,然后在对话框中映射WM_DESTROY消息,在消息处理函数中调用消息发送函数通知其他窗口。在接收消息的窗口中利用ON_MESSAGE映射处理消息的函数,并在消息处理函数中删除对话框对象。第38页/共63页4.6Windows通用对话框在使用Windows的过程中,用户经常会遇到一些常用的有特定用途的对话框,如文件打开对话框、设置字体对话框等。这样的对话框使用非常频繁,为了使用户不必自己设计该类型的对话框,Windows提供了一组标准用户界面对话框,它们都由MFC库中相应的类来支持,可以用来执行各种标准操作,如选择文件、指定字体和选择颜色等。第39页/共63页4.6.1CFontDialog对话框CFontDialog类封装了标准的字体对话框,使用户可以从系统安装的字体列表中选择要用的字体,图4-16即是一个“字体”对话框。“字体”对话框的创建与一般的对话框基本一样,首先是构建一个CFontDialog对象,然后调用CFontDialog::DoModal()函数来启动对话框。第40页/共63页第41页/共63页CFontDialog类的构造函数如下:CFontDialog(LPLOGFONTlplfInitial=NULL,DWORDdwFlags=CF_EFFECTS|CF_SCREENFONTS,CDC*pdcPrinter=NULL,CWnd*pParentWnd=NULL);第42页/共63页4.6.2CFileDialog对话框很多Windows应用程序都具有打开文件和文件另存为功能,这两项功能都需要使用对话框以获取要打开的文件名或欲保存的文件名。CFileDialog类允许编程人员在程序中嵌入通用文件对话框,以实现Windows标准的“打开”和“另存为”对话框。第43页/共63页CFileDialog类的构造函数如下:CFileDialog(BOOLbOpenFileDialog,LPCTSTRlpszDefExt=NULL,LPCTSTRlpszFileName=NULL,DWORDdwFlags=OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,LPCTSTRlpszFilter=NULL,CWnd*pParentWnd=NULL)第44页/共63页4.6.3CColorDialog对话框CColorDialog类用于实现颜色通用对话框,使用户可以从颜色列表中选择要用的颜色。CColorDialog类的构造函数的格式为:CColorDialog(COLORREFclrInit=0,DWORDdwFlags=0,CWnd*pParentWnd=NULL);显示颜色对话框的方法同显示其他通用对话框一样,都是先定义对象,然后调用DoModal()函数,根据DoModal()函数返回的是IDOK还是IDCANCEL可知道用户是否确认了对颜色的选择。DoModal()函数返回后,调用CColorDialog::GetColor()方法可以返回一个COLORREF类型的结果来指示在对话框中选择的颜色。除此之外,也可以利用CColorDialog类中类型为CHOOSECOLOR的成员变量m_cc获取选择的颜色值。第45页/共63页4.6.4CPrintDialog对话框CPrintDialog类支持Print(打印)和PrintSetup(打印设置)对话框,通过这两个对话框用户可以进行与打印有关的操作。打印设置允许用户指定打印时的特殊设置,并将自动处理安装在用户系统上的打印机特殊项。第46页/共63页CPrintDialog类的构造函数如下所示:CPrintDialog(BOOLbPrintSetupOnly,DWORDdwFlags=PD_ALLPAGES|PD_USEDEVMODECOPIES|PD_NOPAGENUMS|PD_HIDEPRINTTOFILE|PD_NOSELECTION,CWnd*pParentWnd=NULL);第47页/共63页4.6.5CFindReplaceDialog对话框CFindReplaceDialog类用于实现Find(查找)和Replace(替换)对话框。创建的对话框仅仅提供了标准接口,它允许输入待查找和替换的字符串,而真正的查找和替换功能则需要程序员自己来实现。与其他通用对话框不同的是,查找和替换对话框是非模式的,因此,对该类的使用要按照非模式对话框进行。第48页/共63页由于“查找和替换”对话框是非模式对话框,它的创建方式与其他4类公用对话框不同。CFindReplaceDialog对象是用new操作符在堆中创建的,而不是像普通对话框那样以变量的形式创建。要启动“查找和替换”对话框,应该调用CFindReplaceDialog::Create()函数,而不是调用DoModal()函数。Create()函数的声明如下:BOOLCreate(BOOLbFindDialogOnly,LPCTSTRlpszFindWhat,LPCTSTRlpszReplaceWith=NULL,DWORDdwFlags=FR_DOWN,CWnd*pParentWnd=NULL);第49页/共63页CFindReplaceDialog类只提供了一个界面,它并不会自动实现搜索和替换功能。该类使用了一种特殊的通知机制,当用户按下了操作的按钮后,它会向父窗口发送一个通知消息,父窗口应在该消息的消息处理函数中实现搜索和替换。CFindReplaceDialog类提供了一组成员函数用来获得与用户操作有关的信息,如表4-12所示,这组函数一般应在通知消息处理函数中调用。第50页/共63页第51页/共63页4.7编程实例——对话框和控件使用综合实例1.编程要求建立一单文档应用程序,运行该程序时首先出现登录对话框,输入的用户名和密码正确后方可进入程序运行界面。为程序添加“控件演示”主菜单,并为其添加“按钮示例”、“列表框示例”两个子菜单项。编写两个子菜单项的消息处理函数,使“按钮示例”演示如何使用单选按钮控制图片变换,“列表框示例”演示如何使用列表框选择不同的控件选项,然后动态生成并显示。第52页/共63页2.编程实现(1)新建SDI项目。启动MicrosoftVisualC++6.0,单击“文件”→“新建”命令,在弹出的“新建”对话框中切换到“工程”选项卡,并选择“MFCAppWizard[exe]”选项,在工程名称文本框中输入“DialogControl”,然后单击“确定”按钮。在弹出的对话框中选择“单文档”单选按钮,其他采取默认设置,然后单击“下一步”按钮。以后设置均采用向导默认设置,直至完成。第53页/共63页(2)添加菜单。展开工作区的ResourceView页面下的Menu文件夹,双击IDR_MAINFRAME,然后双击弹出窗口中的主菜单上的虚线框,弹出“菜单项目属性”对话框,设置主菜单,标题设为“控件演示”。此时,选中“弹出”复选框表示其有下拉菜单。双击其下拉菜单上的虚线框,添加两个子菜单,标题分别为“按钮示例”和“组合框示例”,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组合键,弹出“AddingaClass”对话框,单击“OK”按钮,在弹出的“newclass”对话框中设置其类名为“CDlgIdentity”。使用同样的方法为“按钮测试”和“组合框测试”对话框添加类“CDlg

温馨提示

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

评论

0/150

提交评论