您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > MFC编程基础1基于对话框的Windows应用程序2011年6月
1第1章基于对话框的Windows应用程序1.简介Windows编程的两种方法,即WindowsAPI编程和MFC编程。2.基于对话框的应用程序的创建过程:•建立基于对话框的MFC应用程序框架;•放置控件;•设置控件属性;•为控件连接变量,即为控件命名;•添加并且编写消息处理函数。3.常用基本控件•静态文本框:主要用来显示文本信息,不能接受用户输入•命令按钮:是最常见的、应用最广泛的一种控件。在程序执行期间,当单击某个命令按钮后就会执行相应的消息处理函数。•编辑框:是一个文本编辑区域,用户可以在该区域输入、编辑和显示正文内容。•框架:将一组相关的控件框起来,达到标识一组控件的作用。•单选按钮:用户在一组单选按钮中最多只能选择一项。当某一项被选定后,其他选项自动变成未选状态。•复选框:列出了可供选择的项,用户可根据需要选择其中的一项或多项,各选项之间的状态互不相关。•列表框:通过显示多个选项,供用户选择,达到与用户对话的目的。•组合框:组合了编辑框和列表框的特性而形成的一种控件。在列表框中列出可供用户选择的项,当用户选定某项后,该项内容自动装入编辑框中。•滚动条:通常附在对话框上用来协助观察数据或确定位置,也可以用来作为数据输入的工具。1.1Windows编程基础Windows应用程序的主要特点是:•具有标准的图形用户界面。•具有与硬件无关的特性。•采用“消息传递,事件驱动”的运行机制。用VisualC++编写Windows应用程序主要有两种方法:一是使用Windows提供的应用程序接口(ApplicationProgrammingInterface,API)函数;二是使用Microsoft提供的微软基础类(MicrosoftFoundationClass,MFC)。1.1.1WindowsAPI编程从本质上来说,API是Windows系统支持的函数定义、参数定义和消息格式的集合,共有上千个标准的API函数可供应用程序调用。调用WindowsAPI函数的方法与调用2C语言库函数的方法基本相同。下面通过一个简单的实例来说明WindowsAPI编程是如何调用API函数。#includewindows.hintAPIENTRYWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){MessageBox(NULL,这是一个简单的Windows应用程序!,API函数调用示例,MB_OK);return0;}这是一个简单的Windows应用程序。Windows应用程序的主函数是WinMain(),不是main()函数。函数体中调用了WindowsAPI函数MessageBox(),弹出如图所示的对话框。在直接使用API函数进行Windows编程时,程序员不仅需要熟记一大堆常用的API函数,而且还要对Windows操作系统有深入的了解,编写大量的代码。用这种方式即使是开发一个很简单的应用程序也需要大量的工作,直接用API函数进行编程是需要极大的耐心和丰富的编程经验。1.1.2MFC编程MFC是VisualC++的核心。虽然在Windows应用程序中可以直接调用API函数,但是一般不经常直接调用,而是从MFC类创建对象并调用属于这些对象的成员函数。MFC是Microsoft公司提供的用来编写Windows应用程序的C++类库,MFC大约有200多个类,可以分成两种:一是CObject类的派生类,它们以层次结构的形式组织起来,几乎每个子层次结构都与一个具体的Windows实体对应;二是非CObject派生类,这些都是独立的类,如表示点的CPoint类,表示矩形的CRect类。在VisualC++中,可以创建以下3类典型的Windows应用程序,它们都是通过MFCAppWizard(exe)(以下简称AppWizard)向导创建的:(1)基于对话框的应用程序:这类程序适合于文档较少而交互操作较多的应用场合,如Windows自带的计算器程序。(2)单文档界面(SDI)应用程序:这类程序一次只能打开一个文档,如Windows自带的Notepad程序。(3)多文档界面(MDI)应用程序:这类程序可以同时打开多个文档并进行处理,处理的过程中很容易地进行切换,如MicrosoftWord。1.2基于对话框的Windows应用程序对话框是一种特殊类型的窗口,绝大多数Windows程序都通过对话框与用户进行交互。3在VisualC++中,对话框既可以单独组成一个简单的应用程序,又可以成为文档/视图结构程序的资源。1.2.1简单应用程序实例创建对话框程序的步骤:(1)建立基于对话框的MFC应用程序框架;(2)放置控件(不显示控件箱时,右击VC6.0工具栏空白处,选择“控件”);(3)设置控件属性;(4)为控件连接变量,即为控件命名;(5)添加并且编写消息处理函数。【例1.1】编写一个如图所示的应用程序。若单击“复制”按钮,则把上面的编辑框中的内容复制到下面的编辑框中;若单击“结束”按钮,则退出程序的运行。程序的创建过程:(1)建立基于对话框的MFC应用程序框架。①选择“文件|新建”命令;②在“工程”选项卡中,选定“MFCAppWizard(exe)”,输入工程名称,选择“确定”。③选定“D基本对话”,即创建基于对话框的应用程序,选择“完成”。(2)放置控件•删除原有的控件。•放置所需的控件:两个编辑框和两个命令按钮。方法是:先单击控件工具栏上的控件图标选择所需的控件,然后在对话框设计界面上按住鼠标左键拖拉出所需要的大小后释放。(3)设置控件属性选定控件,在其快捷菜单中选择“属性”命令,在弹出如图所示的对话框中进行设置。上面编辑框的属性设置为:•选定“Multiline”复选框,编辑框中可以输入多行文本。•选定“Verticalscroll”和“AutoVscroll”,编辑框将有垂直滚动条。•选定“Wantreturn”。下面编辑框属性的设置与上面编辑框基本一样,只是可以不选定“Wantreturn”。4从图中可以看到编辑框的ID为IDC_EDIT1,这是该控件的标识。任何一个控件都有一个ID,某些函数需要通过ID对控件进行操作。(4)连接变量为控件连接变量就是为控件起一个名称。每一个控件都是一个对象,调用MFC类库中的函数都是通过对象来实现的。为IDC_EDIT1连接变量m_e1的步骤为:①在IDC_EDIT1编辑框的快捷菜单中选“建立类向导”,弹出“MFCClassWiard”对话框。②在“MemberVariables”中,选定“IDC_EDIT1”,再选择“AddVariable”命令。③在“AddMemberVariable”对话框中输入以下的数据:MemberVariablename(内存变量名):m_e1;Category(类别):Control;Variabletype(类型):Cedit用同样的方法再为IDC_EDIT2连接一个变量m_e2。(5)添加并且编写消息处理函数。本例要求单击“复制”按钮后上面编辑框中的内容复制到下面的编辑框中。也就是说,在程序运行时,在“复制”按钮上发生单击事件后,Windows向对话框发出了一个BN_CLICKED消息,CTESTDlg类应有一个处理该消息的函数。添加和编写这个消息处理函数的过程是:①双击“复制”按钮,弹出的“AddMemberFunction”对话框,输入函数名(缺省函数名为OnButton1),选择“确定”按钮后,添加了一个空函数。另一个方法是在“MFCClassWiard”对话框“MessageMaps”选项卡中,选定IDC_BUTTON1和BN_CLICKED消息,然后选择“AddFunction”按钮即可。添加的空函数如下:voidCTESTDlg::OnButton1(){//TODO:Addyourcontrolnotificationhandlercodehere5}②为voidCTESTDlg::OnButton1()添加代码voidCTESTDlg::OnButton1(){//TODO:Addyourcontrolnotificationhandlercodeherem_e1.SetSel(0,-1);//选定编辑框m_e1中的所有内容m_e1.Copy();//把编辑框m_e1中选定的内容复制到剪贴板m_e2.SetSel(0,-1);//选定编辑框m_e2中的所有内容m_e2.Paste();//将剪贴板中内容粘贴到编辑框m_e2中,替换所有选定的内容}用同样的方法为“结束”按钮添加、编写如下的消息处理函数:voidCTESTDlg::OnButton2(){//TODO:AddyourcontrolnotificationhandlercodehereOnOK();//退出对话框程序}1.2.2对话框应用程序框架用AppWizard创建基于对话框的应用程序框架(假定工程名为TEST)后,项目工作区上增加了一个“ResourceView”选项卡,中间是对话框设计界面,右边是控件工具栏。1.ResourceView在VisualC++中,与用户进行交互的对话框界面被认为是一种资源。展开“Dialog”,可以看到有一个ID为IDD_TEST_DIALOG的资源,对应中间的对话框设计界面。不管在何时,只要双击对话框资源的ID,对话框设计界面就会显示在中间。2.ClassView在ClassView中,如图所示,可以看到生成了3个类:CAboutDlg、CTESTApp和CTESTDlg。(1)CAboutDlg:对应生成的版本信息对话框。(2)CTESTDlg:对话框类,从CDialog继承过来的,在程序运行时看到的对话框就是它的一个具体对象。(3)CTESTApp:应用程序类,从CWinApp继承过来,封装了初始化、运行、终止该程序的代码。3.对话框设计界面对话框设计界面是进行对话框设计的地方,可以将各种控件放置在这里。4.控件工具栏控件工具栏上有26个控件图标,可以通过这些图标在对话框上设计出所需的控件。61.3静态文本框、命令按钮和编辑框静态文本框、命令按钮和编辑框是Windows应用程序中最基本的控件。静态文本框是CStatic类的对象,命令按钮是CButton类的对象,编辑框是CEdit类的对象。这三个类都是从CWnd类直接派生来的,具有CWnd类的全部功能。1.3.1静态文本框静态文本框是最简单的控件。它主要用来显示文本信息,不能接受用户输入,一般不需要连接变量,也不需要处理消息。静态文本框的重要属性有:(1)ID:所有静态文本框的缺省ID都是IDC_STATIC,一般不需要重新设置。(2)标题:需要显示的文本信息是在这里设置的。(3)边框:边框属性在Styles选项卡中,决定是否带有边框。1.3.2命令按钮命令按钮是最常见的、应用最广泛的一种控件。在程序执行期间,当单击某个命令按钮后就会执行相应的消息处理函数。命令按钮的主要属性是标题属性,该属性用来设置在命令按钮上显示的文本。命令按钮一般不需要连接变量。命令按钮能处理的消息是BN_CLICKED。71.3.3编辑框1.属性设置编辑框的属性主要在Styles选项卡中设置。重要属性有:(1)Multiline:定义该编辑框为多行文本框。(2)Number:限定输入的字符只能是数字字符。(3)Border:为控件创建边界。(4)Read-only:编辑框成为只读的,禁止用户编辑。2.成员函数编辑框常用的成员函数见表。此外编辑框还可以使用CWnd类的成员函数。CWnd类的重要成员函数有:(1)获取编辑框中的内容形式1:voidGetWindowText(CString&rString)const;说明:将编辑框中的内容复制到CString类对象rString中。示例:将编辑框m_e中的内容复制到CString类对象ch中。CStringch;m_e.GetWindowText(ch);形式2:intGetWi
本文标题:MFC编程基础1基于对话框的Windows应用程序2011年6月
链接地址:https://www.777doc.com/doc-2882685 .html