1
第 8章 MFC基础知识
2
8.1 MFC概述
MFC是用来编写 Windows应用程序的
C++类集,该类集以层次结构组织起来,
其中封装了大部分 Windows API函数和
Windows控件,它所包含的功能涉及到整
个 Windows操作系统。
MFC不仅为用户提供了 Windows图形
环境下应用程序的框架,而且还提供了
创建应用程序的组件。
3
MFC还很好地保持了程序的向下兼容性
是用来编
写 Windows
应用程序
的 C++类集
以层次结构组织
封装了大部分 API函数
提供了图形环境下应用程序的框架
提供了创建应用程序的组件
提供了大量的基类供程序员根据不同的应用环境进行扩充
允许在编程过程中自定义和扩展应用程序中的类
较好的移植性,可移植于众多的平台
MFC
4
MFC1.0 & MS C/C++7.0
应用程序中非图形部分的类
GUI功能的 Windows相关类
MFC2.0 & MS VC++1.0 在 1.0基础上增添了一些应用程序
MFC3.0 & VC++2.0 增添了对开发 32位应用程序的支持
MFC2.0 & MS VC++1.5 添加了 ODBC类,并且还支持 OLE的性能
MFC4.0 包含了在 Win95和 N中大多数新的公共控件 和 DAO,MAPI
增强了对数据库应用程序的支持
利用 DAO类通过编程语言来访问、操纵和管理数据库
对 Internet也提供了强有力的支持
MFC4.21
5
MFC5.0增强了对 数据库 和 Internet的支持,可使用
ODBC类和 ODBC驱动程序来访问提供 ODBC支持的数
据库中的数据;可以通过数据访问对象( DAO)类通
过编程语言来访问和操纵数据库中的数据并管理数
据库、数据库对象与结构。这些支持主要包括以下
几个部分:
?Win32 Internet API使 Internet成为应用程序的一部分并
简化了对 Internet服务的访问
?Activex文档可以显示在整个 Web浏览器或 OLE容器的
整个客户窗口中
? Activex控件可以用在 Internet和桌面应用程序中可以
使用 CHttpServer,CHttpFilter,ChttpServerContext和
CHttpFilterContext类来建立动态 DLL,以便为 Web页面
增添功能
6
MFC6.0中引进了新的功能:
? 提出了活动文档容器来管理不同类型的文档,
并通过引入类 COleDocObjectItem来加以实现。
同时在应用程序向导中也加入了对这一新特
性的支持。
? 加入了对动态 HTML技术的支持,通过引入一
个新类 CHtmlView,使程序员开发的应用程序
可以浏览并显示用动态 HTML技术开发的 HTML
文档。类 CHtmlView中封装了许多浏览器的特
征,包括浏览器在历史记录、书签和安全等
方面的特征都被封装进了类 CHtmlView。
? 扩展了对公共控件的支持,如时间控键,IP
地址控键和日期控键等。
7
8.2 MFC类的组织结构及主要
的类的简介
8
8.2.1 MFC类的组织结构
MFC库中的类按层次关系划分类:
( 1)根类,CObject
( 2)应用程序体系结构类
( 3)窗口、对话框和控件类
( 4)绘图和打印类
( 5)简单数据类型类
( 6)数组、列表和映射类
( 7)文件和数据库类
( 8) Internet和网络工作类
( 9) OLE类
( 10)调试和异常类
9
8.2.2 根类 --CObject
MFC中多数类和用户自定
义子类的根类,是抽象
基类。它提供了许多编
程所需的公共操作。
对象的建立
对象的删除
运行时信息
对象诊断输出
串行化支持
应用程序和线程支持类
命令相关类
文档类
文档模板类
视类 (体系结构 )
框架窗口 (体系结构 )
应用程序体
系结构类
窗口、对话
框和控件类
框架窗口类(窗口)
视类(窗口)
对话框类
控件条类
绘图和
打印类
输出 (设备相关 )类
绘图工具类
简单数据类型类
数组、列表和映射类 数组类列表类
映射类
10
文件和数据库类
文件 I/O类
DAO类
ODBC类
Internet和网络工作类
ISAPI类
Windows Socket类
Win32 Internet类
OLE类
OLE容器类
OLE服务器类
OLE拖放和数据传输类
OLE普通对话框类
OLE动画类
OLE动画类
OLE控件类
活动文档类
其他文档类
调试和异常类 调试支持类异常类
11
8.2.3应用程序体系结构类
1.命令相关类,CCmdTarget类
该类是 CObject的子类,它是 MFC库中所有具有消息映射属性的
基类。消息映射规定了当一对象接收到消息命令时,应调用哪
一个函数对该消息进行处理
应用程序体
系结构类
1.命令相关类
2.窗口应用程序类
3.文档 /视类
4.线程基类编写程序的任务是填充框架,添加应
用程序专用的功能
用于构造应用程
序框架的结构,
提供多数应用程
序公用的功能
2.线程基类,CWinThread类
所有线程的基类,可直接使用。 CWinApp类就是从
CWinThread类中派生出来的
12
4.文档 /视类
文档对象由文档模板对象创建,管理应用程序的
数据。视对象表示一个窗口的客户区,显示文档数据
并允许用户与之交互
3.窗口应用程序类,CWinApp类
每个应用程序有且只有一个应用程序对象,在运
行程序中该对象与其它对象相互协调,该对象从
CWinApp类中派生出来。 CWinApp类封装了初始化、运
行、终止应用程序的代码。
13
在 CWinApp中定义的部分函数的功能有时也可
以通过 MFC提供的全局函数来实现,这些全
局函数一般都以 Afx为前缀。
例如调用 AfxMessageBox函数将弹出一个消息
框,其功能与 CWinApp中的 DoMessageBox相
同。 AfxMessageBox原型如下:
int AfxMessageBox
( LPCTSTR lpszText,
UINT nType = MB_OK,
UINT nIDHelp = 0
)
14
8.2.4 可视对象类
2.视类,CView类
该类表示框架窗口的客户区和显示文档数据并接收输入的客户区
,其派生类主要有如下几种:
?CScrollView:具有滚动功能的视的基类
?CFormView:其布局在对话资源中定义的滚动视
?CEditView:具有文本编辑、查找、替换和滚动功能的视
1.窗口类,CWnd类
Cwnd提供了 MFC中所有窗
口类的基本功能,是
CCmdTarget类的子类
创建 Windows
窗口要分两
步进行
引入构造函数,构
造一个 CWnd对象
调用 Create建立 Windows窗
口,并将它连到 CWnd对象上
15
3.菜单类,CMenu类
该类是 CObject类的子类,用于管理菜单。它是一个
Windows HMenu的封装,提供了与窗口有关的菜单资
源建立、修改、跟踪及删除的成员函数。
4.对话框类,CDialog类
由于对话框是一个特殊的窗口,所以该类是从 CWnd类
中派生出来的。对话框子层次结构包括通用对话框类
CDialog以及支持文件选择、颜色选择、字体选择、
打印、替换文本的公共对话框子类。
16
5.控件类
控件子层次结构包括若干类,使用这些类可建立静态文本、
命令按钮、位图按钮、列表框、组合框、滚动条、编辑框等。
这些直观控件为 Windows应用程序提供了各种输入和显示界面。
6.控件条类,CControlBar类
控件条子层次结构为工具条、状态条、对话条和分割窗
口建立模型。该类是 CToolBar,CStatusBar,CDialogBar的
基类,负责管理工具条、状态条、对话条的一些成员函数。控
件条指的是连接在主窗口框架的顶部或底部的小窗口
17
7.绘画对象类,CGdiObject类
图形绘画对象子层次结构以 CGdiObject类为根类,可用于建
立绘画对象模型,如画笔、刷子、字体、位图、调色板等。
8.设备描述表类,CDC类
该类及其子类支持设备描述表对象,是 CObject类的子类。
CDC类是一个较大的类,包括许多成员函数,如映射函数、
绘画工具函数、区域函数等,通过 CDC对象的成员函数可以
完成所有的绘画工作
18
8.2.5 通用类
此类提供了许多通用服务,例如文件 I/O、诊断和异常处理等,
此外还包括如数组和列表等存放数据集的类
1.文件类,CFile类和 CArchive类 用以编写输入输出处理函数
2.异常类,CException类
是所有异常情况的基类。不能直接建立
CException对象,只能建立派生类的对
象,用派生类来捕获指定的异常情况
3.模板收集类
这些类可以将多种对象存放到数组、列表和, 映射,
中。但这些收集类是模板,它们的参数确定了存放在
集合中的对象类型。
19
CException的派生类如下 。
? CNotSupportedException:不支持服务异常
? CMemoryException:内存异常
? CFileException:文件异常
? CResourceException:资源异常
? COleException,OLE异常
? CArchiveException:档案异常
? CDaoException:基于 DAO的数据库类异常
? CDBException:数据库类异常
? CUserException:终端用户操作异常
20
产生异常的原因描述将储存在异常对象的
m_cause数据成员中。
例如 CArchiveException 类的 m_cause数据成员
的可能值如下:
? badClass:不能读错误对象类型中的内容
? badIndex:无效文件格式
? badSchema:无效对象版本
? endOfFile:到达文件尾
? Generic:不明异常
? None:无异常
? readOnly:试图向只读文件进行写操作
? writeOnly:试图向只写文件进行读操作
21
8.2.6 OLE类
对象连接与嵌入子
层次结构为支持 OLE
提供了 9个类
普通类
COleDocuemnt
COleItem
COleException
客户类 COleClientDocCOleClientItem
服务器类
COleServer
COleTemplate
COleServerDoc
COleServerItem
MFC中提供了对 OLE技术体系的全方位的支持。
它提供了 OLE基类、可视编辑容器类、可视编辑
服务器类、数据传送类,OLE对话类和杂项类等
六种类来封装 OLE技术。
22
8.2.7 ODBC数据库类
数据
库类
CDatabase:封装对数据源的连接,通过此连
接应用程序可在该数据源上进行操作
CRecordset:封装了从数据源选出的记录
这些类面向 ODBC
且封装了 ODBC API
23
CRecordView:由 CFormView派生, 该类
将记录集对象连接到显示当前记录的字
段值的一个表单视图来简化操作 。
CFieldExchange:提供上下文信息, 支持
在字段数据成员, 记录对象的参数数据
成员及数据源上的对应列表之间进行数
据交换
CLongBinary:封装一存储句柄, 用于存储
二进制的对象, 例如位图等
CDBException:记录数据存取处理过程中
的失败产生的异常
常见
数据
库类
24
8.3MFC 中全局函数和全局变量
以 Afx为前缀的函数 (数据库类函数和 DDX函数
除外 )和变量,在目前的版本中,都表示全
局函数或全局变量。
AfxAbort,无条件终止一个应用程序
AfxBeginThread,创建一个新线程并执行它
AfxEndThread,终止当前正在执行的线程
AfxFormatString,格式化字符串
AfxMessageBox,显示一个 Windows消息框
AfxGetApp,返回当前应用程序对象的指针
AfxGetInstanceHandle:返回标识当前应用程序对象的句柄
AfxRegisterWndClass:注册用于创建 Windows窗口的窗口类
常见全局函数
25
8.4应用程序向导
26
27
28
29
30
31
32