没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
第
1
章
MFC 的基本概念
1.0 引 言
Visual C++是一个全面的应用程序开发环境,它在具有面向对象特性的 C++的基础上增
强了功能,使用它可以开发出专业级的 Windows 应用程序。为了能充分掌握 Visual C++的
各种特性,首先必须理解 C++程序设计语言,在掌握了 C++后,还需要了解和掌握 MFC
(Microsoft Foundation Class,微软基本类库)的内容和 MFC 的层次结构,该层次结构封装
了 Windows API 中的用户界面部分和各种 MFC 控件,最后还需要了解 MFC 的窗口、文档、
视图等框架体系以及消息映射机制。
1.1 MFC 概述
如果要开发一个 Windows 应用程序,一般应该从设计用户界面开始。
首先要决定什么用户将使用该程序,并根据用户需求来设置相应的用户界面对象,作
为程序员必须选择一组控件并决定如何把它们安排到界面上。
接下来要实现代码。为任何 Windows 平台建立应用程序时,程序员都有两种选择:C
或 C++。使用 C 时,程序员是在 Windows 应用程序界面(API)的基础上编写代码。该界
面是由几百个 C 函数组成的,这些函数在 Windows API 参考手册中都有介绍。但显然这
不是最好的选择,因为 C 语言不具备面向对象特性,并且使用 Windows API 函数来实现窗
口以及消息响应非常麻烦,所以程序员希望有更好地选择。Microsoft 在 Windows API 的基
础上封装了一组 C++的类,并以 C++库的方式提供,这将能够使程序员的工作更容易,它
就是 Microsoft 基本类库( MFC),该库的主要优点是效率高,它 减少了在建立 Windows 程
PDF 文件使用 "FinePrint pdfFactory Pro" 试用版本创建 www.fineprint.com.cn
2
序时必须编写的大量代码,同时还提供了所有利用 C++编程的优点,例如继承和封装等。
MFC 提供面向对象的框架,程序开发人员可以利用这一框架创建 Windows 应用程序。
MFC 按照 C++类的层次结构组织在一起。高层类提供一般功能,而低层类实现更具体的行
为。每一个低层类都是从高层类中派生出来的,因此继承了高层类的行为,例如 CWnd 类
是实现了所有 Windows 窗口中的大多数常用功能的高层类,此类具备的功能包括打印文本、
绘制图形以及跟踪鼠标指针的移动等。CSplitterWnd 类实现一种可拆分的特殊窗口,它将
主窗口拆分为两个或两个以上的窗口,用户可以通过移动各部分之间的边框来改变大小,
如 Windows 的资源管理器就是使用拆分窗口而显示计算机方面的信息的。
MFC 还为程序的开发提供了其他方便之处。MFC 处理很多与 Windows 相关的任务,
例如在后台进行消息处理以及路由选择时,无须在所开发的每一个应用程序中编写相同的
消息处理循环,MFC 可自动实现这一消息循环,并提供易学易用的成员函数,例如
OnPaint(),用于插入代码、处理窗口消息。
除类的层次结构外,MFC 也提供一个应用程序的开发模型。此模型称为文档-视图模
型,是将应用程序数据与用户界面元素分离的一种编程方法。它允许这两部分程序独立存
在,这样程序员在更改其中一部分的时候,不会大幅度地更改另一部分,例如一个文字处
理器或电子表格程序,该应用程序中包含的数据是文档-视图模型中的文档,而数据显示部
分是视图。文档类中包含允许视图类与应用程序数据一起运行的成员函数。只要这些函数
本身不发生改变,用户界面也就无须改变。事实上,该文档甚至无须是一个字处理文档或
电子表格,它可以是数据库中的记录或图形图像。只要成员函数不发生改变,使用什么类
型的信息无关紧要。
使用 MFC 的最大优点是它进行了在使用 SDK 编程时所有最难做的工作。MFC 中包
含了成千上万行正确、优化和功能强大的 Windows 代码。所调用的很多成员函数可以完
成用户自己可能很难完成的工作。从这点上讲,MFC 极大地加快了程序开发速度。
MFC 是很庞大的,如最新版本中包含了大约两百多个不同的类。万幸的是,在开发一
般的应用程序中不需要使用所有的类以及它们的成员函数。事实上,可能只需要使用其中
的十多个 MFC 中的不同类就可以建立一个非常完善的程序。该层次结构大约可分为如下几
种不同的类型:
l 应用程序框架。
l 图形绘制的绘制对象。
l 文件服务。
l 异常处理。
l 结构,如 List、Array 和 Map。
l Internet 服务。
l OLE 2。
l 数据库。
l 通用类。
PDF 文件使用 "FinePrint pdfFactory Pro" 试用版本创建 www.fineprint.com.cn
MFC 的基本概念
3
1
常用的类有 CObject、CCmdTarget、CWinThread、CWinApp、CWnd、CFrameWnd、
CDialog、CView、CStatic、CButton、CListBox、CComboBox、CEdit、CScrollBar。
需要注意的是如下两点。
l MFC 中的大部分类都是从基类 CObject 中继承的,该类包含大部分 MFC 类所通
用的数据成员和成员函数。
l CWinApp 类是在建立应用程序时需要用到的,并且在任何程序中都只用一次。
CWnd 类汇集了 Windows 中的所有通用特性、对话框和控制。CFrameWnd 类是
从 CWnd 中继承的,并实现了标准的框架应用程序。CDialog 可分别处理无模式
和有模式两种类型的对话框。CView 用于让用户通过窗口来访问文档。
最后,Windows 支持 6 种控制类型,包括静态文本框、可编辑文本框、按钮、滚动条、
列表框和组合框(一种扩展的列表框)。了解了以上内容,可对掌握 MFC 有很大帮助。
为了建立一个 MFC 应用程序,既要懂得直接使用这些类的方法,也需要学会从这些类
中继承新的类。在继承的类中可以建立新的成员函数,从而满足各种项目开发的需要。
1.2 MFC 的设计原理
应用程序开发框架(例如 MFC)是库的集合,它向程序开发人员提供一组服务来协助
开发。在通常情况下,应用程序开发框架被设计为尽可能地使开发过程合理化以及简化困
难或繁琐的编程任务。尤其是 MFC 能够简化大部分 Windows API 的使用。MFC 采用了 API
中的一些功能,例如窗口管理、图形输出或消息路由选择,并利用对程序更有好处的 C++
类进行封装,使之更易于使用。在很多情况下,MFC 在幕后执行一些复杂操作,它向开发
人员提供更简单的编程界面,并将 Windows API 的一些复杂特性隐藏起来。
框架设计的健壮性可以通过框架的扩展性反映出来。任何框架都应该很容易地被扩展。
很多 C++框架的依赖语言都具有这种扩展性能,但是仅仅依赖语言特征是不够的,框架的
内部结构也必须被认真构造,保持顺序一致,从而使其能被真正地扩展。
MFC 的设计目标有如下两个:
l MFC 应该为 Windows 操作系统提供一个面向对象的接口。
l 支持可重用性、自包含性及其他 OOP 原则。
实现上述目标的前提是不需要强加给系统过多的工作或不增加应用程序对内存的不必
要开销。
第一个目标的实现可通过编写类来封装窗口、对话框及其他对象,并引入某些关键的
虚函数来完成。第二个目标要求 MFC 设计人员尽早地就如何将窗口、菜单及其他对象被
MFC(如 CWnd 和 CMenu 等)封装进行选择。
在 Windows 中,有关窗口特性和目前状态的信息被保存在操作系统拥有的内存中。这
PDF 文件使用 "FinePrint pdfFactory Pro" 试用版本创建 www.fineprint.com.cn
4
些信息对应用程序是隐藏的,应用程序只能处理窗口句柄或 HWND。MFC 并没有复制在
CWnd 类的数据成员中的与 HWND 相关的所有信息,事实上,MFC 通过将 HWND 存储在
m_hWnd的公用 CWnd 数据成员中,而在 CWnd内封装了一个窗口。作为规则,如果 Windows
通过某些类型的句柄展示一个对象,那么相应的 MFC 类就会包含那个句柄的数据成员。
1.3 MFC 的特性
MFC 主要支持如下特性:
l 文档-视图体系结构。
l 多文档界面(MDI)。
l 打印以及打印预览支持。
l 使用并创建 ActiveX 控件。
l ODBC 以及 Access 数据库支持。
l Internet(TCP/IP)编程支持。
l Windows 常用控件支持。
l 多线程支持。
曾经使用过传统的 Windows 编程方法开发过应用程序的读者应该深刻地体会到,即使
是开发一个简单的 Windows 应用程序也需要对 Windows 的编程原理有很深刻地认识,同时
也要手工编写很多代码。而且程序的出错率几乎是随着代码长度的增加呈几何级数增长的,
这使得调试程序变得非常困难,所以传统的 Windows 编程是需要极大的耐心和丰富的编程
经验的。
近 20 年来,面向对象技术无论是在理论还是实践上都在飞速地发展。面向对象技术中
最重要的就是“对象”的概念,它把现实世界中的气球、自行车等客观实体抽象成程序中
的“对象”。这种“对象”具有一定的属性和方法,这里的属性是指对象本身的各种特性参
数,如气球的体积、自行车的长度等,而方法是指对象本身所能执行的功能,如气球能飞、
自行车能骑等。一个具体的对象可以有许多的属性和方法,面向对象技术的重要特点就是
对象的封装性,对于外界而言,并不需要知道对象有哪些属性,也不需要知道对象本身的
方法是如何实现的,而只需要调用对象所提供的方法来完成特定的功能即可。从该特点可
以看出,当把面向对象技术应用到程序设计中时,程序员只是在编写对象方法时才需要关
心对象本身的细节问题,而大部分的时间是放在对对象的方法的调用上,并组织这些对象
进行协同工作。
MFC 的本质就是一个包含许多微软公司已经定义好的对象的类库,虽然用户要编写的
程序在功能上是千差万别的,但从本质上来讲,都可以划分为对用户界面的设计、对文件
的操作、多媒体的使用、数据库的访问等方面,这也是微软提供 MFC 类库最重要的原因,
在这个类库中包含了一百多个程序开发过程中最常用到的对象。在进行程序设计时,如果
类库中的某个对象能完成所需要的功能,则只要简单地调用已有对象的方法就可以了。还
可以利用面向对象技术中很重要的“继承”方法从类库中的已有对象派生出自己的对象,
PDF 文件使用 "FinePrint pdfFactory Pro" 试用版本创建 www.fineprint.com.cn
MFC 的基本概念
5
1
这时派生出来的对象除了具有类库中的对象的特性和功能外,还可以由用户自己根据需要
加上所需要的特性和方法,从而产生一个专门的、功能更为强大的对象。当然也可以在程
序中创建全新的对象,并根据需要不断完善对象的功能。
正是由于 MFC 编程方法充分利用了面向对象技术的优点,使 得 编 程 时不必关心对象方
法的实现细节,同时类库中的各种对象足以完成程序中的绝大部分功能,从而大幅度减少
应用程序中编写的代码,有力地保证了程序的良好性和可调试性。
1.4 MFC 类的分层结构
下面从 Windows 程序的工作原理、建立应用程序、程序结构剖析、MFC 的基本类、
其他的用户界面类、绘图类、其他的 MFC 类等 7 个方面讲解 MFC 类的分层结构。
1. Windows 程序的工作原理
Windows 程序设计是一种完全不同于传统 DOS 方式的程序设计方法,它 采 用一种事件
驱动方式的程序设计模式。在程序提供给用户的界面中有许多可操作的可视对象。用户从
所有可能的操作中任意选择一种,被选择的操作会产生某些特定的事件,这些事件发生后
向程序中的某些对象发送消息,然后这些对象调用相应的消息处理函数来完成特定的操作。
Windows 应用程序的最大特点就是程序没有固定的流程,而只是针对某个事件的处理有特
定的子流程,Windows 应用程序就是由许多这样的子流程构成的。
从上面的讨论中可以看出,Windows 应用程序在本质上是面向对象的。程序提供给用
户界面的可视对象在程序的内部一般也是一个对象,用户对可视对象的操作通过事件驱动
模式触发相应对象的可用方法。程序的运行过程就是用户的外部操作不断产生事件、这些
事件又被相应的对象处理的过程。
2. 建立应用程序
选择 Build | Rebuild All 命令后,系统将编译由 AppWizard 自动生成的程序框架中所有
文件的源代码,并且链接生成可执行的应用程序。按 Ctrl+F5 快捷键后,应用程序将开始
运行,虽然用户没有编写一行代码,但是可以看出由系统自动生成的应用程序的界面已经
有了一个标准的 Windows 应用程序所需要的几个组成部分,用户要做的是向这个应用程序
中添加必要的代码,以完成特定的功能。
3. 程序结构剖析
MFC 提供了许多设计好的类来满足广泛的需要。MFC 的对象层次类似于目录结构的
组织方式,它包 含 一个根对象 CObject,其他大多数对象都是从 CObject 中直接或间接派生
的。CObject 为那些继承的类提供了 3 个重要的特性:
l 串行化支持。
l 运行时类信息支持。
l 诊断和调试支持。
PDF 文件使用 "FinePrint pdfFactory Pro" 试用版本创建 www.fineprint.com.cn
剩余359页未读,继续阅读
资源评论
Linux兵工厂
- 粉丝: 3652
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功