MFC编程基础知识 (2).ppt





《MFC编程基础知识 (2).ppt》由会员分享,可在线阅读,更多相关《MFC编程基础知识 (2).ppt(48页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Visual C+Visual C+第第7 7章章 MFC MFC编程基础知识编程基础知识7.17.1 MFC MFC 概述概述 7.27.2 MFCMFC的层次结构及其子类功能简介的层次结构及其子类功能简介 7.37.3 MFCMFC应用程序架构应用程序架构 习题习题教学要点教学要点 本章内容主要包括利用面向对象的观点理解利用面向对象的观点理解MFCMFC,利用继承思想讲解MFC中的具有层次关系的类、应用程序架构与软件复用,建立最简单的具有图形用户界面的MFC应用程序。要求了解工作区的了解工作区的ClassViewClassView视图中的各个菜单的含义视图中的各个菜单的含义、一些可视对象中
2、的可视成分在图形界面中的表现,能够利用MSDN查看各个类之间的继承图,掌握MFC中类的抽象性、封装性和继承性,熟练掌握建立最简单的具有图形用户界面的MFC应用程序的方法。Visual C+Visual C+概述概述 VC开发应用程序的最常用的模式就是利用MFC进行Win32应用程序的设计。简单来说,MFC就是利用面向对象的思想,将Windows大部分API函数封装起来的一个浩瀚的类库,利用MFC编写程序本质上就是选择该类库中合适的类,并调用其下相应成员函数来完成某个功能。虽然MFC编程相对于API编程简单了(入门是简单了,但作到胸中丘壑自成却不容易),但初学者却常常忘不了学习MFC的艰难。其其
3、主主要要原原因因有有:(1 1)MFC采用的是C+语言,对C+本身的技术没有掌握。因此想学好MFC,必须把第一篇的内容搞清楚;(2 2)MFC庞大的类库中类的命名及成员变量或成员函数的命名没有清楚,其实很简单,MFC中的类及其成员的命名都采用的是匈牙利命名法,把这些名字的英文直接翻译过来,就知道它是什么意思。(3 3)MFC编程,首先生成的是一个应用程序架构,对这个架构的不了解导致生成的代码不知其为何如此。本章就是要给大家一个架构的概貌;(4 4)传统的API编程的步骤统统不见了,使人们不知道编写的Windows程序什么时候建立起来、什么时候消亡.事实上,MFC的应用程序架构把类似于API编程
4、所要求的步骤都隐藏了,都封装到架构中了Visual C+Visual C+对于初学者,只需要清楚自己的代码往什么地方添加就可以(5 5)缺乏面向对象分析能力。面向对象的分析要求搞清楚一个系统中有哪些类、各个类之间有哪些联系,尤其是在编写基于文档/视图结构的应用程序时。该方面能力的培养要靠多分析一些程序中类之间的关系,并要参考相关方面的书籍介绍。本章把MFC类库中的主要类以层次结构做了一个简单的介绍,并对MFC应用程序的架构做了描述。对于MFC应用程序的学习,刚开始要“不求甚解”,懂得代码的放置以及原理就可以了,随着学习的深入,在查看MFC源代码后,就能逐渐了解到该类型应用程序的执行流程,从而最
5、终掌握MFC应用程序的开发。概述概述(续)(续)Visual C+Visual C+7.17.1 MFCMFC概述概述 什么是什么是MFCMFC MFCMFC的设计原理的设计原理 MFCMFC的目标的目标 MFCMFC的发展的发展*7.1.5 *7.1.5 使用使用C+C+和和MFCMFC的好处的好处Visual C+Visual C+7.1.1 7.1.1 什么是什么是MFCMFC MFCMFC是是Microsoft Foundation ClassMicrosoft Foundation Class(微软基础类)的缩写。(微软基础类)的缩写。从物理角度看,它是一个庞大的类库、包含可控制计算
6、机系统方方面面的类库,它对应的是Windows系统目录下的一系列mfc*.dll文件;从逻辑角度看,它是一个面向对象的应用程序框架,程序员可以使用这一框架创建Windows应用程序。MFC的组织是以C+类的层次形式组织在一起,几个高层类提供一般功能,而低层类实现更具体的功能,每一个低层类都是从高层类派生而来,因此继承了高层类的功能。MFCMFC处理很多与处理很多与WindowsWindows相关的常见任务相关的常见任务,例如例如在后台做消息处理以及对消息进行路由选择,无需程序员在每一个开发的Windows应用程序中编写相同的消息处理循环,MFC已经实现了这一消息循环,并对大多数常见的消息提供了
7、易学易用的消息响应函数。例如OnPain()就是CWnd类的一个成员函数,是对WM_PAINT消息进行响应的一个虚成员函数。除了类的层次外,MFCMFC也提供了一个应用程序开发框架也提供了一个应用程序开发框架,此框架被称为文档/视图架构。Visual C+Visual C+7.1.2 MFC7.1.2 MFC的设计原理的设计原理 MFCMFC向向软软件件开开发发者者提提供供一一组组服服务务,来来协协调调应应用用程程序序。在很多情况下,MFC在幕后执行一系列复杂的操作,它向程序员提供了更加简单的编程界面,并可掩盖Windows API的一些缺点(MFC类的许多成员函数,如MessageBox()
8、中提供了缺省参数,这减轻了程序员编程的负担)。MFCMFC采采用用面面向向对对象象的的设设计计方方法法,将将Windows Windows APIAPI中中的的相相关关部部分分组组合合到到C+C+类类或或对对象象中中。例如CWnd类封装了大部分有关窗口处理的API函数。作为编程人员,不必记忆大量API函数,需要作的只是实例化CWnd类的一个实例,并调用相应的成员函数即可。Visual C+Visual C+7.1.3 MFC7.1.3 MFC的目标的目标 建立MFC库的目的是为了简化Windows应用程序的编制,MFC开发小组的工作是将此目的和程序设计原理结合起来。MicrosoftMicro
9、soft在在建建立立MFCMFC库库遵遵循循了了一一些基本原则,下面所列的设计原则,也就是他们的设计目标:些基本原则,下面所列的设计原则,也就是他们的设计目标:(1)(1)有效简化编写Windows应用程序的难度,使用C+创建Windows应用程序的过程容易和直观。(2)(2)合并已有的Windows的模型和概念。(3)(3)确保类库有足够的扩展性,以便于加入Windows后续版本的特性和功能。(4)(4)更容易使用Windows API特性。同时采用Windows API的概念、编程风格和函数名称。(5)(5)用类来封装Windows API和Windows对象,并按照API的指引完成工作。
10、(6)(6)更容易使用一些强大、复杂功能的抽象概念,如ActiveX、数据库支持、打印等。Visual C+Visual C+*7.1.4 MFC*7.1.4 MFC的发展的发展 微软于1989年成立了Application Framework开发小组,开始设计一个用于建立图形界面的可移植的C+类库。AFX(Applicatin Framework的缩写面向对象的技术建立一个易于使用并可移植的GUI。然而一年以后,AFX计划失败了,其主要原因是AFX开发小组过于信任面向对象程序设计方法的能力,一个纯粹抽象的类往往并不实用。因此,AFX开发小组转向开发MFC库,并将其实现目标从多目标平台转向对W
11、indows API的封装;他们也不再试图建立高度抽象的类,而重点在于建立实际可用的类;他们还避开使用复杂的C+的结构(例如,多重继承和模板),而)的目的是建立一个单一的类库,用 来 简 化 Windows、OS/2 Presentation Manager和 Apple Macintosh 应用程序的开发,当时,开发小组希望利用只是使用了一个C+的子集;另外,他们不再使用抽象的类来隐藏Windows本身 API的细节,而是使用户能够很方便地存取Windows原有的API。这样做有两个原因:首首先先,可以简化已有的Win16代码到 MFC库的转换;其次,确保原有API的所有功能对应用程序都是可
12、以使用的,这意味着可以绕过类库而直接调用这些 Windows原有的API函数。Visual C+Visual C+AFXAFX和和MFCMFC的的另另一一个个区区别别是所使用的开发方法不同,AFX采用是自顶向下的设计方法,逐步将对象抽象出来并施加到 Windows上;而 MFC库采用的则是自底向上的设计方法,也就是说,从MFC的第一个版本开始,它的类就是建立在已有的Windows API 对象基础上的,这样就避免了AFX中代码的超支与浪费。当读者使用MFC进行编程时,将会发现在MFC源程序中有很多包含“AFX”的 字 符 串,如 函函 数数 名名 AfxGetApp()AfxGetApp(),
13、常常 量量 名名AFX_IDS_APP_TITLEAFX_IDS_APP_TITLE,数数据据结结构构名名AFX_MSGMAP_ENTRYAFX_MSGMAP_ENTRY等等等等。这些名称在Windows API函数中是不存在的,它们是AFX开发小组遗留的痕迹,而MFC的基本框架正是建筑于这些东西之上,所以MFC多多少少保留了该开发小组的标志AFX。可见Microsoft基本类库(MFC)封装了SDK(软件开发工具包)结构、功能及应用程序框架内部技术。该应用程序框架隐藏过去Windows程序员不得不处理的许多重复性工作。*7.1.4 MFC*7.1.4 MFC的发展的发展(续)(续)Visua
14、l C+Visual C+*7.1.5*7.1.5 使用使用C+C+和和MFCMFC的好处的好处 从本书的第一篇,我们已经看出了面向对象程序设计的好处,如可复用性、代码和数据紧密地绑定等。类是面向对象程序设计的核心概念,程序中不仅可以使用自己建立的类,还可以使用系统所提供的类,一个好的类库可以大大减少编码的数量。MFCMFC成成功功之之处处在在于于,它它是是一一个个类类库库、一一个个包包罗罗计计算算机机系系统统方方方方面面面面的的类类库库、一一个个集集MicroSoftMicroSoft各各路路软软件件高高手手之之大大成成的的类类库库。通过从MFC继承自己所需要的类,可以充分利用基类所具有的各
15、种功能。MFC将类、类的继承、动态约束、类的关系和相互作用等应用程序概念封装起来,可以使开发者高效、轻松地建立Windows应用程序,而不受设备限制并且由事件进行驱动。MFCMFC具具有有良良好好的的通通用用性性和和可可移移植植性性,它定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的工作就是通过VC所提供的各种工具来完成这个工作。Visual C+Visual C+7.27.2 MFCMFC的层次结构及其子类功能简介的层次结构及其子类功能简介 7.2.1 7.2.1 MFCMFC中类的层次结构中类的层次结构 根类根类CObject CObject 应用程序体系结构类应用程序
16、体系结构类 可视对象类可视对象类 预定义的宏预定义的宏Visual C+Visual C+7.2.1 MFC7.2.1 MFC中类的层次结构中类的层次结构 MFC是一个包含了超过200个不同类的很庞大的类库。利用他们,开发者可以完成许多标准的Windows编程任务,并且可以在应用程序中加入许多复杂的特性。在设计思想上,MFC将面向对象的方法与事件驱动结合得很好,因此要理解庞大的MFC类库中的常用类的功能,要利用面向对象的思想进行理解和分析。类的抽象性、封装性、继承性和多态度在你碰到的类中是如何体现的。它封装了窗口的哪些数据成员和方法,哪些类是从这个类中派生出来的,该类中可超载的虚函数都有哪些(
17、只有搞清虚拟函数才能搞清多态性)。打开MSDN,选中窗口左半部分的“搜索”选项卡,在待搜索的编辑框中输入“hierarchy chart”后按回车,MSDN就把MFC的层次结构图显示在窗口的右半部分,如图7.1所示。Visual C+Visual C+图图7.17.1Visual C+Visual C+7.2.2 7.2.2 根类根类CObjectCObject CObject是MFC中一个非常重要的类,绝大部分MFC类都是以CObject做为基类,它是CmdTargrt类和CWnd类的父类。自己所编写的类一般以其作为基类,了解它们对于深入理解MFC具有重要意义。CObject类是MFC的抽象
18、基类(不能派生对象),是MFC中多数类和用户自定义类的根类,它为程序员提供了许多公共操作和基本服务。主主要要包包括括:对象的动态建立与删除、序列化(即串行化)的支持、对象诊断输出、运行时信息以及集合类的兼容等。它它的的作作用用是是,使得MFC以及基于MFC的应用程序更加稳固和易于调试。Visual C+Visual C+7.2.37.2.3应用程序体系结构类应用程序体系结构类 1 1消息映射类消息映射类CCmdTargetCCmdTarget 该类是CObject的子类,是MFC类库中所有具有消息映射属性的基类,消息映射规定了当对象接到命令消息时,应调用哪一个函数对该消息进行处理。命令消息是来
19、自菜单项、命令按钮和加速键的信息,由CCmdTarget派生出的主框架类包括CView、CWinApp、CDocument、CWnd和CframeWnd都可处理命令消息。程序员若需要一个新类来处理消息时,可以从CCmdTarget派生出一个新类。一般程序员很少从CCmdTarget类中直接派生出新类,而是从其子类CView、CWinApp来派生 2 2窗口应用程序类窗口应用程序类CWinAppCWinApp 每一个使用MFC的应用程序只能包含一个从CWndApp派生的应用程序对象,当VC的其它全局对象被构造时,这个对象也同时被构造,当Windows调用WinMain()函数时,产生的对象已经有
20、效了。从CWinApp实例化的应用程序对象是一个全局变量,在程序运行中该对象可以与其它对象相互协调。(1 1)访问CWinApp对象以及全局函数。AfxGetApp:获得一指向CWinApp对象的指针Visual C+Visual C+AfxGetResourceHabdle:获得一应用程序资源的句柄。AfxGetAppName:获得一指针,它指向一个包含应用程序名的字符串。相反,如果有一个指向CWinApp对象的指针,使用m_pszExename可以取得应用程序的名称。(2 2)CWinApp的公共数据成员 m_pszAppName:指定应用程序的名称。m_nCmdShow:指定窗口最初将如
21、何显示。m_pMainWnd:包含一个指针,它指向一个应用程序的主窗口。(3 3)CWinApp的公共成员函数 LoadCursor:调取光标资源。LoadStandardCursor:调 取 Windows预 定 义 光 标,在windows.h中指定IDC常量。LoadIcon:调取一个图标资源。LoadStandardIcon:调取Windows预定义的图标,在windows.h中 指定IDI常量。OpenDocumentFile:框架调用此函数打开一个指定的文档。7.2.37.2.3应用程序体系结构类应用程序体系结构类(续)(续)Visual C+Visual C+(4 4)CWinA
22、pp的可超载的函数InitApplication:重载以执行任何应用程序层次上的初始化。InitInstance:重载以执行Windows对象实例的初始化,诸如建立用户窗 口对象等。Run:运行缺省的消息循环,重载该函数以自定义消息循环。OnIdle:重载以执行任何应用程序指定的空闲时间处理。PreTranslateMessage:在 窗 口 消 息 被 TranslateMessage()和 DispatchMessage()处理之前过滤它们。(5 5)CWinApp的保护成员函数 SetDialogBkColor:为对话框和消息框设置缺省的背景颜色。Enable3dConrtols:允许具
23、有三维外观的控件。3 3应用程序线程类应用程序线程类CWinThreadCWinThread 该类为线程的基类,CWinApp是从CWinThread派生而来。该对象描述程序线程的执行,主线程的执行通常由一个CWinApp的派生对象提供。(1)CWinThread的公共数据成员 m_hThread:当前线程的句柄。m_nThreadID:当前线程的ID值。7.2.3 7.2.3 应用程序体系结构类应用程序体系结构类(续)(续)Visual C+Visual C+m_pMainWnd:指向程序主窗口指针。(2)CWinThread的公共成员函数 GetMainWnd:获取一个指向此线程的的主窗口
24、指针。GetThreadPriority:获取当前线程的优先权。ResumeThread:减小一个线程的挂起计数。4.4.文档文档/视图类视图类 文档对象由文档模板对象创建,管理应用程序的数据。视图对象表示一个窗口的客户区,它显示文档数据并允许用户与之交互。CDocTemplate类:文档模板的基类。它负责协调文档、视窗和框架窗口的创建。CMultiDocTemplate类:多文档界面(MDI)的文档模板。CSingleDocTemplate类:单文档界面(SDI)的文档模板。CDocument:应用程序所用文档的基类。CView:显示文档数据的应用程序专用视图的基类。7.2.37.2.3应用
25、程序体系结构类应用程序体系结构类(续)(续)Visual C+Visual C+7.2.4 7.2.4 可视对象类可视对象类 1.1.窗口类窗口类CWndCWnd CWnd类提供了MFC中所有窗口类的基类。CWnd与Windows窗口有所不同,但他们又是紧密相连的。CWnd对象是由CWnd的构造函数和析构函数建立和取消的,而Windows窗口与此不同,它是Windows的一个结构,是由create成员函数建立的,DestroyWindow函数破坏Windows窗口而不是破坏对象。(1)CWnd(1)CWnd类的公共数据成员类的公共数据成员 m_hWnd:标识连接到该CWnd对象上的HWND。(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC编程基础知识 2 MFC 编程 基础知识

限制150内