MFC框架基础介绍.ppt
《MFC框架基础介绍.ppt》由会员分享,可在线阅读,更多相关《MFC框架基础介绍.ppt(77页珍藏版)》请在三一办公上搜索。
1、7/7/2023,WINDOWS程序开发 讲师:鲍钰,1,MFC框架基础介绍,讲师:鲍钰,7/7/2023,WINDOWS程序开发 讲师:鲍钰,2,Microsoft Foundation Class微软基础类,7/7/2023,WINDOWS程序开发 讲师:鲍钰,3,MFC基础,用传统的Windows编程方法开发应用程序,你会深刻地体会到,即使是开发一个简单地Windows应用程序也需要对Windows的编程原理有很深刻的认识,同时也要手工编写很多的代码。因为程序的出错率几乎是随着代码长度的增加呈几何级数增长的,这就使得高度程序变得非常困难。所以传统的Windows编程是需要极大的耐心和丰富
2、的编程经验的。,7/7/2023,WINDOWS程序开发 讲师:鲍钰,4,MFC基础,近几年来,面向对象技术无论是在理论还是实践上都在飞速地发展。面向对象技术中最重要的就是“对象”的概念,它把现实世界中的气球、自行车等客观实体抽象成程序中的“对象”。这种“对象”具有一定的属性和方法,这里的属性指对象本身的各种特性参数。如气球的体积,自行车的长度等,而方法是指对象本身所能执行的功能,如气球能飞、自行车能滚动等。一个具体的对象可以有许多的属性和方法,面向对象技术的重要特点就是对象的封装性,对于外界而言,并不需要知道对象有哪些属性,也不需要知道对象本身的方法是如何实现的,而只需要调用对象所提供的方法
3、来完成特定的功能。从这里我们可以看出,当把面向对象技术应用到程序设计中时,程序只是在编写对象方法时才需要关心对象本身的细节问题,大部分的时间是放在对对象的方法的调用上,组织这些对象进行协同工作。,7/7/2023,WINDOWS程序开发 讲师:鲍钰,5,MFC基础,MFC的英文全称是Microsoft Fundation Classes,即微软的基本类库,MFC的本质就是一个包含了许多微软公司已经定义好的对象的类库,自从1993年美国微软公司推出Visual C+1.0后便配套推出了微软基础类库MFC 1.0(Microsoft Founddation Class)。MFC 1.0第一个拉开了
4、以面向对象的程序设计方法编制多任务、多进程的GUI应用软件系统的序幕。微软公司在16位平台上几乎没有停留多久,便陆续推出了MFC 1.5,MFC 2.0(含支持32位的Win32),MFC3.0,MFC 4.0。1997年5月 随着Visual C+5.0的问世,人们看到了支持Web应用和ActiveX的MFC 6.0基础类库系统。,7/7/2023,WINDOWS程序开发 讲师:鲍钰,6,MFC基础,虽然我们要编写的程序在功能是千差万别的,但从本制裁上来讲,都可以化归为用户界面的设计,对文件的操作,多媒体的使用,数据库的访问等等一些最主要的方面。这一点正是微软提供MFC类库最重要的原因,在这
5、个类库中包含了100多个程序开发过程中最常用到的对象。在进行程序设计的时候,如果类库中的某个对象能完成所需的功能,这时我们只要简单地调用已有对象的方法就可以了。我们还可以利用面向对象技术中很重要的“继承”方法从类库中的已有对象派生出我们自己的对象,这时派生出来的对象除了具有类库中对象的特性和功能之外,还可以由我们自己根据需要加上所需的特性和方法,产生一个更专门的,功能更为强大的对象。当然,你也可以在程序中创建全新的对象,并根据需要不断完美对象的功能。,7/7/2023,WINDOWS程序开发 讲师:鲍钰,7,MFC基础,正是由于MFC编程方法充分利用了面向对象技术的优点,它使得我们编程时极少需
6、要关心对象方法的实现细节,同时类库中的各种对象的强大功能足以完成我们程序中的绝大部分所需功能,这使得应用程序中程序员所需要编写的代码大为减少,有力地保证了程序良好的可调试性。,7/7/2023,WINDOWS程序开发 讲师:鲍钰,8,MFC基础,最后要指出的是,MFC类库在提供对象的各种属性和方法都是经过地谨慎地编写和严格地测试,可靠性很高,这就保证了使用MFC类库不会影响程序的可靠性和正确性。MFC是很庞大的。例如,版本7.0中包含了大约200个不同的类。万幸的是,你在典型的程序中不需要使用所有的函数。事实上,你可能只需要使用其中的10多个MFC中的不同类就可以建立一个非常漂亮的程序。,7/
7、7/2023,WINDOWS程序开发 讲师:鲍钰,9,微软基础类库MFC,7/7/2023,WINDOWS程序开发 讲师:鲍钰,10,MFC体系结构MFC是个相当庞大的类库,各个类间的继承与派生关系井井有条。CObject类是MFC的基类,其它大部分类都是从CObject派生而来的。CObject类的派生类按功能可分为多个部分。下面简要介绍部分常用的类的派生结构。,7/7/2023,WINDOWS程序开发 讲师:鲍钰,11,窗口类 图:部分窗口类的继承关系,CObject,CCmdTarget,CWnd,CFrameWnd,CView,CDialogBox,7/7/2023,WINDOWS程序
8、开发 讲师:鲍钰,12,其中,CCmdTarget(命令目标类)是MFC中拥有消息循环和消息处理机制的基类。关于MFC Windows程序中建立消息处理机制的步骤在后面详细介绍。CWnd类是从CCmdTarget中派生出来的重要类,它是所有窗口类的基类。CCmdTarget间接派生出了文档/视图结构中应用程序框架中的许多重要的类:CWinApp、CFrameWnd、CDocument、CView等(SDI应用程序框架的四个主要的类)。,7/7/2023,WINDOWS程序开发 讲师:鲍钰,13,应用程序框架类 图:应用程序框架类的继承关系CWinApp类是从CCmdTarget中派生出来的最重
9、要的类,每个用MFC编写的Windows程序必须有一个它的派生类的对象,它代表一个应用程序,整个程序的运行都由它负责。CWinApp类很大程度上隐藏了API Windows程序中WinMain函数。,CObject,CCmdTarget,CWinThread,CDocument,CWinApp,7/7/2023,WINDOWS程序开发 讲师:鲍钰,14,图形绘制类 图:图形绘制类的继承关系图形绘制类的基类是CDC(设备环境类)。CDC类提供了基本的绘图及文本输出函数。,7/7/2023,WINDOWS程序开发 讲师:鲍钰,15,图形对象类 图:部分绘图对象类的继承关系绘图对象类提供给CDC及其
10、派生类在绘图时所需的各种图形对象,如画笔、刷子、字体等。,7/7/2023,WINDOWS程序开发 讲师:鲍钰,16,MFC体系结构,MFC主要组成部分:类、宏和全局函数。类是MFC中最主要的内容。MFC类是以层次结构方式组织起来的。MFC中的类分成两部分,除了一些辅助类,大多数的MFC类是直接或间接从根类CObject派生而来。几乎每一个派生层次都与一具体的Windows实例相对应,如文档类、窗口类和视图类等。MFC宏主要功能:消息映射、运行时对象类型服务、诊断服务、异常处理。MFC约定:全局函数以“Afx”为前缀,全局变量以“afx”为前缀。,7/7/2023,WINDOWS程序开发 讲师
11、:鲍钰,17,宏就是用预处理指令#define定义一个标识符,用它来表示一个字符串或一段源代码。MFC宏作为MFC类库的一个组成部分在MFC应用程序中经常出现。MFC宏在Afxwin.h、Afx.h及Afxmsg_.h等MFC头文件中分别进行了定义。MFC提供的宏有很多,常用的包括消息映射宏、运行时类型识别的宏、调试宏和异常宏等,下表列出了一般MFC编程时要用到的宏。,MFC宏,7/7/2023,WINDOWS程序开发 讲师:鲍钰,18,7/7/2023,WINDOWS程序开发 讲师:鲍钰,19,MFC调试宏,跟踪声明和断言在查找程序设计错误时是非常有用的。跟踪声明可以让程序在运行过程中遇到跟
12、踪声明时在输出窗口显示指定的信息,而断言使程序在断言条件不成立时暂停程序的运行。MFC提供了一些跟踪声明和断言宏用于程序调试,这些宏只能用于DEBUG版本应用程序的调试状态。1TRACE()宏语法说明如下:TRACE();其中参数是由输出格式和变量等组成的输出表达式,其格式与函数printf()的参数一样,它指定调试时要在Output窗口输出的内容。,7/7/2023,WINDOWS程序开发 讲师:鲍钰,20,char*szName=“LiMing”;int nAge=18;TRACE(“Name=%s,Age=%d n”,szName,nAge);(只有在调试的时候才可以使用,才可以有结果输
13、出),例1 对于以下代码:,调试时在Output窗口输出以下内容:Name=LiMing,Age=18,7/7/2023,WINDOWS程序开发 讲师:鲍钰,21,例2 设自定义一个CFrameWnd的派生类CMyFrame,在程序中构建一个与CMyFrame相关联的文档模板对象,并为构键的文档模板创建框架窗口:CMyFrame*pFrame=(CMyFrame*)AfxGetMainWnd();ASSERT(pFrame-IsKindOf(RUNTIME_CLASS(CMyFrame);/判断pFrame的类型 pFrame-DoSomeOperation();ASSERT(1=2);/当条
14、件为假时,退出程序调试的时候可以调用,7/7/2023,WINDOWS程序开发 讲师:鲍钰,22,目录MFCBaseMacro下例程,F5看TRACE信息,右键ASSERT退出,7/7/2023,WINDOWS程序开发 讲师:鲍钰,23,常用的MFC类,MFC库中的类按层次关系划分类根类:CObject应用程序体系结构类窗口、对话框和控件类绘图和打印类简单数据类型类数组、列表和映射类文件和数据库类Internet和网络工作类OLE类调试和异常类,7/7/2023,WINDOWS程序开发 讲师:鲍钰,24,CRuntimeClass结构 CRuntimeClass在MFC中是以结构的方式定义,它
15、含有使用CRuntimeClass结构的类的有关信息,与CObject类一同实现运行时类型识别的功能。CRuntimeClass结构包含了类名、对象所占存储空间大小及类的版本号等成员变量和动态对象创建、派生关系判断等成员函数。每个从CObject类派生的类都有一个CRuntimeClass对象同它关联。要使用CRuntimeClass结构,必须结合使用RUNTIME_CLASS()宏和其它有关运行时类型识别的MFC宏。,7/7/2023,WINDOWS程序开发 讲师:鲍钰,25,CObject类由于MFC中大部分类是从CObject类继承而来的,CObject类描述了几乎所有的MFC类的一些公
16、共特性,CObject类为程序员提供了对象诊断、运行时类型识别和序列化等功能。对象诊断。MFC提供了两种诊断特性:利用成员函数AssertValid()进行对象有效性检查,使得类可以在继续运行前对自己进行正确性检查;利用成员函数Dump()输出对象的数据成员的值。运行时访问类的信息:提供GetRuntimeClass()和IskindOf()两个成员函数来支持运行时类型识别。对象序列化。,7/7/2023,WINDOWS程序开发 讲师:鲍钰,26,命令相关类:CCmdTarget类该类是CObject的子类,它是MFC库中所有具有消息映射属性的基类。消息映射规定了当一对象接收到消息命令时,应调
17、用哪一个函数对该消息进行处理。设置光标。CCmdTarget类定义3个函数用于改变光标状态:BeginWaitCursor()将光标改为沙漏形状,EndWaitCursor()将光标改回调用BeginWait-Cursor()之前的形状,RestoreWaitCursor()用于将光标还原为等待状态。,void CMyView:OnSomeCommand()BeginWaitCursor();/显示沙漏状光标./进行某种操作EndWaitCursor();/恢复原来光标的形状,7/7/2023,WINDOWS程序开发 讲师:鲍钰,27,窗口应用程序类:CWinApp类在MFC应用程序中,CWi
18、nApp类取代了WinMain()主函数在SDK应用程序中的地位。传统SDK应用程序WinMain()函数完成的工作现在由类CWinApp的InitApplication()、InitInstance()和Run()三个成员函数承担。CWinApp类封装了初始化、运行、终止应用程序的代码。在任何MFC应用程序中有且仅有一个CWinApp派生类的对象,它代表了程序中运行的主线程,也代表了应用程序本身。,7/7/2023,WINDOWS程序开发 讲师:鲍钰,28,可视对象类:CWnd类CWnd类由CCmdTarget类直接派生而来,该类及其派生类的实例是一个窗口。CWnd类代表了MFC中最基本的G
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC 框架 基础 介绍
链接地址:https://www.31ppt.com/p-5439903.html