资源预览内容
第1页 / 共42页
第2页 / 共42页
第3页 / 共42页
第4页 / 共42页
第5页 / 共42页
第6页 / 共42页
第7页 / 共42页
第8页 / 共42页
第9页 / 共42页
第10页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第5章 MFC基础知识Windows体系及编程体系及编程王新颖第5章 MFC基础知识第第5章章 MFC基础知识基础知识教学目标:1.了解MFC的功能和作用 2.理解MFC的组织结构 3.学会建立一个基本的MFC程序 教学重点:1. MFC的组织结构 2.建立一个基本的MFC程序教学难点: MFC的组织结构第5章 MFC基础知识第第5章章 MFC基础知识基础知识5.1 MFC概述概述 5.2 MFC类的组织结构及主要的类的简介类的组织结构及主要的类的简介 5.3 应用程序向导应用程序向导第5章 MFC基础知识5.1 MFC概述 程序主干由程序主干由WinMain和和WndProc两个函数构成,两个函数构成,WinMain是是Windows程序的入口函数,通常在该函数程序的入口函数,通常在该函数中注册、创建窗口,建立消息循环。中注册、创建窗口,建立消息循环。当收到消息后调当收到消息后调用用WndProc进行处理进行处理(由系统实现的间接调用由系统实现的间接调用)。在在WndProc中,需要针对不同的消息中,需要针对不同的消息(用户操作鼠标、用户操作鼠标、点击菜单、按键、系统消息等点击菜单、按键、系统消息等)作出相应的处理。作出相应的处理。程序员应对数以千计的程序员应对数以千计的Windows API函数函数第5章 MFC基础知识5.1 MFC概述 MFC帮助我们将繁多的API整合起来,利用面向对象原理,将其逻辑地组织起来,具备封装、继承、多态、模块化特点。将API编程中的众多的“一成不变”的内容隐藏在MFC类中,如WinMain、注册窗口、创建窗口等操作。使用众多精妙的宏和消息映射机制,大大简化程序员的工作,增强代码模块化。配合集成开发环境:AppWizard、ClassWizard、资源编辑器,提高编程效率第5章 MFC基础知识5.1 MFC概述 VC提供应用程序向导AppWizard,能快速生成应用程序框架,框架集成了几个相互作用的类。 MFC已经建立了对象与对象之间的关系,设定了消息的流动程序。当要为应用程序设计一个应用功能时,不必要知道使用者如何按键、如何点击鼠标,只要注意按键之后真正要做的功能即可。MFC带来面向对象程序设计的观念和方法,并使我们能继承这些优秀工程技术人员的成果来开发自己所需要的程序。第5章 MFC基础知识5.1 MFC概述 API编程模式:程序结构清晰,从WinMain开始,注册窗口类、创建窗口、建立消息循环、窗口过程等,程序的流程比较清晰。MFC程序设计:高门槛隐藏(封装)了程序运行的基本过程,不理解众多的类及相互关系大量的宏及消息映射机制框架的约束第5章 MFC基础知识MFCMFC还很好地保持了程序的向下兼容性还很好地保持了程序的向下兼容性是用来编是用来编写写WindowsWindows应用程序应用程序的的C+C+类集类集以层次结构组织以层次结构组织封装了大部分封装了大部分APIAPI函数函数提供了图形环境下应用程序的框架提供了图形环境下应用程序的框架提供了创建应用程序的组件提供了创建应用程序的组件提供了大量的基类供程序员根据不同的应用环境进行扩充提供了大量的基类供程序员根据不同的应用环境进行扩充允许在编程过程中自定义和扩展应用程序中的类允许在编程过程中自定义和扩展应用程序中的类较好的移植性,较好的移植性,可移植于众多的平台可移植于众多的平台MFCMFC第5章 MFC基础知识封装封装 构成MFC框架的是MFC类库。MFC类库是C+类库。这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下:(1)对Win32应用程序编程接口的封装(2)对应用程序概念的封装 (3)对COM/OLE特性的封装 (4)对ODBC功能的封装 第5章 MFC基础知识继承继承 首先,MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。针对每种不同的对象,MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。这些对象包括以下种类:窗口对象,基类是CWnd;应用程序对象,基类是CwinThread;文档对象,基类是Cdocument,等等。程序员将结合自己的实际,从适当的MFC类中派生出自己的类,实现特定的功能,达到自己的编程目的。第5章 MFC基础知识虚拟函数和动态约束虚拟函数和动态约束 MFC以“C+”为基础,支持虚拟函数和动态约束。但是作为一个编程框架,有一个问题必须解决:如果仅仅通过虚拟函数来支持动态约束,必然导致虚拟函数表过于臃肿,消耗内存,效率低下。例如,CWnd封装 Windows窗口对象时,每一条Windows消息对应一个成员函数,这些成员函数为派生类所继承。如果这些函数都设计成虚拟函数,由于数量太多,实现起来不现实。于是,MFC建立了消息映射机制,以一种富有效率、便于使用的手段解决消息处理函数的动态约束问题。第5章 MFC基础知识MFC的宏观框架体系的宏观框架体系 MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。第5章 MFC基础知识MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提供更高一层的接口,简化了Windows编程。同时,MFC支持对底层API的直接调用。 MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件 MFC是C+类库,程序员就是通过使用、继承和扩展适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C+对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制。 第5章 MFC基础知识MFC1.0 & MS C/C+7.0MFC1.0 & MS C/C+7.0应用程序中非图形部分的类应用程序中非图形部分的类GUIGUI功能的功能的WindowsWindows相关类相关类MFC2.0 & MS VC+1.0MFC2.0 & MS VC+1.0在在1.01.0基础上增添了一些应用程序基础上增添了一些应用程序MFC3.0 & VC+2.0MFC3.0 & VC+2.0增添了对开发增添了对开发3232位应用程序的支持位应用程序的支持MFC2.0 & MS VC+1.5MFC2.0 & MS VC+1.5添加了添加了ODBCODBC类,并且还支持类,并且还支持OLEOLE的性能的性能MFC4.0MFC4.0包含了在包含了在Win95Win95和和N N中大多数新的公共控件中大多数新的公共控件和和DAODAO、MAPIMAPI增强了对数据库应用程序的支持增强了对数据库应用程序的支持利用利用DAODAO类通过编程语言来访问、操纵和管理数据库类通过编程语言来访问、操纵和管理数据库对对InternetInternet也提供了强有力的支持也提供了强有力的支持MFC4.21MFC4.21第5章 MFC基础知识 MFC5.0增强了对数据库和Internet的支持,可使用ODBC类和ODBC驱动程序来访问提供ODBC支持的数据库中的数据;可以通过数据访问对象(DAO)类通过编程语言来访问和操纵数据库中的数据并管理数据库、数据库对象与结构。这些支持主要包括以下几个部分:Win32 Internet API使Internet成为应用程序的一部分并简化了对Internet服务的访问Activex文档可以显示在整个Web浏览器或OLE容器的整个客户窗口中 Activex控件可以用在Internet和桌面应用程序中可以使用CHttpServer、CHttpFilter、ChttpServerContext和CHttpFilterContext类来建立动态DLL,以便为Web页面增添功能第5章 MFC基础知识MFC6.0MFC6.0中引进了新的功能:中引进了新的功能:提出了活动文档容器来管理不同类型的文档,并通过引入类提出了活动文档容器来管理不同类型的文档,并通过引入类COleDocObjectItemCOleDocObjectItem来加以实现。同时在应用程序向导中也来加以实现。同时在应用程序向导中也加入了对这一新特性的支持。加入了对这一新特性的支持。加入了对动态加入了对动态HTMLHTML技术的支持,通过引入一个新类技术的支持,通过引入一个新类CHtmlViewCHtmlView,使程序员开发的应用程序可以浏览并显示用动,使程序员开发的应用程序可以浏览并显示用动态态HTMLHTML技术开发的技术开发的HTMLHTML文档。类文档。类CHtmlViewCHtmlView中封装了许多浏中封装了许多浏览器的特征,包括浏览器在历史记录、书签和安全等方面的览器的特征,包括浏览器在历史记录、书签和安全等方面的特征都被封装进了类特征都被封装进了类CHtmlViewCHtmlView。扩展了对公共控件的支持,如时间控键、扩展了对公共控件的支持,如时间控键、IPIP地址控键和日期地址控键和日期控键等。控键等。第5章 MFC基础知识5.2 MFC类的组织结构及主要的类的简介 第5章 MFC基础知识5.2.1 MFC类的组织结构 MFC库中的类按层次关系划分类:(1)根类:CObject(2)应用程序体系结构类(3)窗口、对话框和控件类(4)绘图和打印类(5)简单数据类型类(6)数组、列表和映射类(7)文件和数据库类(8)Internet和网络工作类(9)OLE类(10)调试和异常类第5章 MFC基础知识5.2.2 根类-CObject MFCMFC中多数类和用户自定中多数类和用户自定义子类的根类,是抽象义子类的根类,是抽象基类。它提供了许多编基类。它提供了许多编程所需的公共操作。程所需的公共操作。对象的建立对象的建立对象的删除对象的删除运行时信息运行时信息对象诊断输出对象诊断输出串行化支持串行化支持应用程序和线程支持类应用程序和线程支持类命令相关类命令相关类文档类文档类文档模板类文档模板类视类视类( (体系结构体系结构) )框架窗口框架窗口( (体系结构体系结构) )应用程序体应用程序体系结构类系结构类窗口、对话窗口、对话框和控件类框和控件类框架窗口类(窗口)框架窗口类(窗口)视类(窗口)视类(窗口)对话框类对话框类控件条类控件条类绘图和绘图和打印类打印类输出输出( (设备相关设备相关) )类类绘图工具类绘图工具类简单数据类型类简单数据类型类数组、列表和映射类数组、列表和映射类数组类数组类列表类列表类映射类映射类第5章 MFC基础知识文件和数据库类文件和数据库类文件文件I/OI/O类类DAODAO类类ODBCODBC类类InternetInternet和网络工作类和网络工作类ISAPIISAPI类类Windows SocketWindows Socket类类Win32 InternetWin32 Internet类类OLEOLE类类OLEOLE容器类容器类OLEOLE服务器类服务器类OLEOLE拖放和数据传输类拖放和数据传输类OLEOLE普通对话框类普通对话框类OLEOLE动画类动画类OLEOLE动画类动画类OLEOLE控件类控件类活动文档类活动文档类其他文档类其他文档类调试和异常类调试和异常类调试支持类调试支持类异常类异常类第5章 MFC基础知识5.2.3应用程序体系结构类 1 1命令相关类:命令相关类:CCmdTargetCCmdTarget类类该类是该类是CObjectCObject的子类,它是的子类,它是MFCMFC库中所有具有消息映射属性的库中所有具有消息映射属性的基类。消息映射规定了当一对象接收到消息命令时,应调用哪基类。消息映射规定了当一对象接收到消息命令时,应调用哪一个函数对该消息进行处理一个函数对该消息进行处理应用程序体应用程序体系结构类系结构类1.1.命令相关类命令相关类2.2.窗口应用程序类窗口应用程序类3.3.文档文档/ /视类视类4.4.线程基类线程基类编写程序的任务是编写程序的任务是填充框架,添加应填充框架,添加应用程序专用的功能用程序专用的功能用于构造应用程用于构造应用程序框架的结构,序框架的结构,提供多数应用程提供多数应用程序公用的功能序公用的功能2 2线程基类:线程基类:CWinThreadCWinThread类类所有线程的基类,可直接使用。所有线程的基类,可直接使用。CWinAppCWinApp类就是从类就是从CWinThreadCWinThread类中派生出来的类中派生出来的第5章 MFC基础知识4 4文档文档/ /视类视类 文档对象由文档模板对象创建,管理应用程序的文档对象由文档模板对象创建,管理应用程序的数据。视对象表示一个窗口的客户区,显示文档数据数据。视对象表示一个窗口的客户区,显示文档数据并允许用户与之交互并允许用户与之交互3 3窗口应用程序类:窗口应用程序类:CWinAppCWinApp类类 每个应用程序有且只有一个应用程序对象,在运每个应用程序有且只有一个应用程序对象,在运行程序中该对象与其它对象相互协调,该对象从行程序中该对象与其它对象相互协调,该对象从CWinAppCWinApp类中派生出来。类中派生出来。CWinAppCWinApp类封装了初始化、运类封装了初始化、运行、终止应用程序的代码。行、终止应用程序的代码。第5章 MFC基础知识在在CWinApp中定义的部分函数的功能有时也可以通过中定义的部分函数的功能有时也可以通过MFC提供的全局函数来实现,这些全局函数一般都以提供的全局函数来实现,这些全局函数一般都以Afx为前为前缀。缀。例如调用例如调用AfxMessageBox函数将弹出一个消息框,其功能函数将弹出一个消息框,其功能与与CWinApp中的中的DoMessageBox相同。相同。AfxMessageBox原型如下:原型如下:int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 )第5章 MFC基础知识5.2.4 可视对象类 2 2视类:视类:CViewCView类类该类表示框架窗口的客户区和显示文档数据并接收输入的客户区,该类表示框架窗口的客户区和显示文档数据并接收输入的客户区,其派生类主要有如下几种:其派生类主要有如下几种:lCScrollViewCScrollView:具有滚动功能的视的基类具有滚动功能的视的基类lCFormViewCFormView:其布局在对话资源中定义的滚动视其布局在对话资源中定义的滚动视lCEditViewCEditView:具有文本编辑、查找、替换和滚动功能的视具有文本编辑、查找、替换和滚动功能的视1 1窗口类:窗口类:CWndCWnd类类CwndCwnd提供了提供了MFCMFC中所有窗中所有窗口类的基本功能,是口类的基本功能,是CCmdTargetCCmdTarget类的子类类的子类创建创建WindowsWindows窗口要分两窗口要分两步进行步进行引入构造函数,构引入构造函数,构造一个造一个CWndCWnd对象对象调用调用CreateCreate建立建立WindowsWindows窗窗口,并将它连到口,并将它连到CWndCWnd对象上对象上第5章 MFC基础知识3 3菜单类:菜单类:CMenuCMenu类类该类是该类是CObjectCObject类的子类,用于管理菜单。它是一个类的子类,用于管理菜单。它是一个Windows Windows HMenuHMenu的封装,提供了与窗口有关的菜单资的封装,提供了与窗口有关的菜单资源建立、修改、跟踪及删除的成员函数。源建立、修改、跟踪及删除的成员函数。4 4对话框类:对话框类:CDialogCDialog类类由于对话框是一个特殊的窗口,所以该类是从由于对话框是一个特殊的窗口,所以该类是从CWndCWnd类类中派生出来的。对话框子层次结构包括通用对话框类中派生出来的。对话框子层次结构包括通用对话框类CDialogCDialog以及支持文件选择、颜色选择、字体选择、以及支持文件选择、颜色选择、字体选择、打印、替换文本的公共对话框子类。打印、替换文本的公共对话框子类。第5章 MFC基础知识5 5控件类控件类 控件子层次结构包括若干类,使用这些类可建立静态文本、控件子层次结构包括若干类,使用这些类可建立静态文本、命令按钮、位图按钮、列表框、组合框、滚动条、编辑框等。命令按钮、位图按钮、列表框、组合框、滚动条、编辑框等。这些直观控件为这些直观控件为WindowsWindows应用程序提供了各种输入和显示界面。应用程序提供了各种输入和显示界面。6 6控件条类:控件条类:CControlBarCControlBar类类 控件条子层次结构为工具条、状态条、对话条和分割窗口控件条子层次结构为工具条、状态条、对话条和分割窗口建立模型。该类是建立模型。该类是CToolBarCToolBar、CStatusBarCStatusBar、CDialogBarCDialogBar的基类,的基类,负责管理工具条、状态条、对话条的一些成员函数。控件条指负责管理工具条、状态条、对话条的一些成员函数。控件条指的是连接在主窗口框架的顶部或底部的小窗口的是连接在主窗口框架的顶部或底部的小窗口第5章 MFC基础知识7 7绘画对象类:绘画对象类:CGdiObjectCGdiObject类类图形绘画对象子层次结构以图形绘画对象子层次结构以CGdiObjectCGdiObject类为根类,可用于建类为根类,可用于建立绘画对象模型,如画笔、刷子、字体、位图、调色板等。立绘画对象模型,如画笔、刷子、字体、位图、调色板等。8 8设备描述表类:设备描述表类:CDCCDC类类该类及其子类支持设备描述表对象,是该类及其子类支持设备描述表对象,是CObjectCObject类的子类。类的子类。CDCCDC类是一个较大的类,包括许多成员函数,如映射函数、类是一个较大的类,包括许多成员函数,如映射函数、绘画工具函数、区域函数等,通过绘画工具函数、区域函数等,通过CDCCDC对象的成员函数可以对象的成员函数可以完成所有的绘画工作完成所有的绘画工作第5章 MFC基础知识5.2.5 通用类 此类提供了许多通用服务,例如文件此类提供了许多通用服务,例如文件I/OI/O、诊断和异常处理等,诊断和异常处理等,此外还包括如数组和列表等存放数据集的类此外还包括如数组和列表等存放数据集的类1 1文件类:文件类:CFileCFile类和类和CArchiveCArchive类类用以编写输入输出处理函数用以编写输入输出处理函数2 2异常类:异常类:CExceptionCException类类是所有异常情况的基类。不能直接建立是所有异常情况的基类。不能直接建立CExceptionCException对象,只能建立派生类的对对象,只能建立派生类的对象,用派生类来捕获指定的异常情况象,用派生类来捕获指定的异常情况3 3模板收集类模板收集类这些类可以将多种对象存放到数组、列表和这些类可以将多种对象存放到数组、列表和“ “ 映射映射”中。但这些收集类是模板,它们的参数确定了存放在中。但这些收集类是模板,它们的参数确定了存放在集合中的对象类型。集合中的对象类型。第5章 MFC基础知识CException的派生类如下。的派生类如下。CNotSupportedExceptionCNotSupportedException:不支持服务异常:不支持服务异常CMemoryExceptionCMemoryException:内存异常:内存异常CFileExceptionCFileException:文件异常:文件异常CResourceExceptionCResourceException:资源异常:资源异常COleExceptionCOleException:OLEOLE异常异常CArchiveExceptionCArchiveException:档案异常:档案异常CDaoExceptionCDaoException:基于:基于DAODAO的数据库类异常的数据库类异常CDBExceptionCDBException:数据库类异常:数据库类异常CUserExceptionCUserException:终端用户操作异常:终端用户操作异常第5章 MFC基础知识产生异常的原因描述将储存在异常对象的产生异常的原因描述将储存在异常对象的m_causem_cause数据成员中。数据成员中。例如例如CArchiveExceptionCArchiveException 类的类的m_causem_cause数据成员的可能值如下:数据成员的可能值如下:badClassbadClass: :不能读错误对象类型中的内容不能读错误对象类型中的内容badIndexbadIndex: :无效文件格式无效文件格式badSchemabadSchema: :无效对象版本无效对象版本endOfFileendOfFile: :到达文件尾到达文件尾Generic:Generic:不明异常不明异常None:None:无异常无异常readOnlyreadOnly: :试图向只读文件进行写操作试图向只读文件进行写操作writeOnlywriteOnly: :试图向只写文件进行读操作试图向只写文件进行读操作第5章 MFC基础知识5.2.6 OLE类 对象连接与嵌入子对象连接与嵌入子层次结构为支持层次结构为支持OLEOLE提供了提供了9 9个类个类普通类普通类COleDocuemntCOleDocuemntCOleItemCOleItemCOleExceptionCOleException客户类客户类COleClientDocCOleClientDocCOleClientItemCOleClientItem服务器类服务器类COleServerCOleServerCOleTemplateCOleTemplateCOleServerDocCOleServerDocCOleServerItemCOleServerItemMFCMFC中提供了对中提供了对OLEOLE技术体系的全方位的支持。技术体系的全方位的支持。它提供了它提供了OLEOLE基类、可视编辑容器类、可视编辑基类、可视编辑容器类、可视编辑服务器类、数据传送类、服务器类、数据传送类、OLEOLE对话类和杂项类等对话类和杂项类等六种类来封装六种类来封装OLEOLE技术。技术。第5章 MFC基础知识5.2.7 ODBC数据库类 数据数据库类库类CDatabase:封装对数据源的连接,通过此:封装对数据源的连接,通过此连接应用程序可在该数据源上进行操作连接应用程序可在该数据源上进行操作CRecordset:封装了从数据源选出的记录:封装了从数据源选出的记录这些类面向这些类面向ODBC且封装了且封装了ODBC API第5章 MFC基础知识CRecordView:由由CFormView派派生生,该该类类将将记记录录集集对对象象连连接接到显示当前记录的字段值的一个表单视图来简化操作。到显示当前记录的字段值的一个表单视图来简化操作。CFieldExchange:提提供供上上下下文文信信息息,支支持持在在字字段段数数据据成成员员、记记录录对对象象的的参参数数数数据据成成员员及及数数据据源源上上的的对对应应列列表表之之间间进进行行数据交换数据交换CLongBinary:封封装装一一存存储储句句柄柄,用用于于存存储储二二进进制制的的对对象象,例如位图等例如位图等CDBException:记录数据存取处理过程中的失败产生的异常:记录数据存取处理过程中的失败产生的异常 常见常见数据数据库类库类第5章 MFC基础知识5.3MFC 中全局函数和全局变量以以Afx为前缀的函数为前缀的函数( (数据库类函数和数据库类函数和DDX函数除外函数除外) )和变量和变量,在目前的版本中,都表示全局函数或全局变量。在目前的版本中,都表示全局函数或全局变量。 AfxAbort:无条件终止一个应用程序无条件终止一个应用程序AfxBeginThread: 创建一个新线程并执行它创建一个新线程并执行它AfxEndThread:终止当前正在执行的线程终止当前正在执行的线程AfxFormatString:格式化字符串格式化字符串AfxMessageBox: 显示一个显示一个Windows消息框消息框AfxGetApp:返回当前应用程序对象的指针返回当前应用程序对象的指针AfxGetInstanceHandle:返回标识当前应用程序对象的:返回标识当前应用程序对象的句柄句柄AfxRegisterWndClass:注册用于创建:注册用于创建Windows窗口的窗口的窗口类窗口类常见全局函数常见全局函数第5章 MFC基础知识5.4应用程序向导 第5章 MFC基础知识第5章 MFC基础知识第5章 MFC基础知识第5章 MFC基础知识第5章 MFC基础知识第5章 MFC基础知识第5章 MFC基础知识
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号