Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2717538
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: C/C++

2007-11-16 21:27:36

本文简要介绍MFC所包含的主要几种Class,大家最好要记住MFC的分类和各个Class的作用(特别是CObject派生的(CObject-Derived) Classes应用程序结构(Application Architecture) Classes用户界面(User-Interface) Classes这三种,一定要记住),这是后面章节的基础。大家现在无需知道各个Class的使用方法,因为我会在后面详细说明的。注:以下内容有部分摘自MSDN,其实我也记不住那么多Class,一般是有需要才去查帮助文件的。

一、CObject派生的(CObject-Derived) Classes

CObject是MFC大多数Class的基类,它主要提供了一些基本功能,主要包括:
Serialization,指把对象(Object)从存储媒体(例如磁盘上的文件)中读出或写入的过程;
Run-time Class信息,指从CObject派生的对象包含有在运行时可以访问的信息;
诊断输出,指CObject提供了一些输出函数,这些函数可以输出程序执行过程中的一些信息,可以帮助你调试程序。

从CObject派生的类为MFC应用程序提供了基本的结构和功能,重要的有以下几种:

类别 基类 描述
Command Targets CCmdTarget 用于处理用户请求
Applications CWinApp 代表应用程序的核心
Documents CDocument 包含应用程序的数据集
Windows CWnd 主要用于图形用户界面(GUI)的对象,可以处理常见的Windows Messages
Frames CFrameWnd 用于应用程序的主要Window框架
Views CView 用于显示数据并于Document对象交互

此外,CObject-Derived Class还包括用于菜单、文件服务、图形等方面的Class。

MFC也包含了一些不是从CObect派生的类,这些类相对来说可以节省开销,主要分为以下几种:
1、用于常规编程的实用类,例如:CString, CTime, CTimeSpan, CRec, CPoint, CSize;
2、MFC结构的支持类,例如CArchive, CDumpContext, CRuntimeClass, CFileStatue, CMemoryState
3、用户定义指针的集合类,例如CTypedPointerArray

二、应用程序结构(Application Architecture) Classes

  应用程序结构Class代表应用程序的基本结构元素,主要包括CWinApp, CDocument, CCmdTarget和CWinThread。当应用程序开始运行时,这些Class是最先被初始化的,它们都有很重要的作用。

1、CWinApp, 代表应用程序自己,所有的MFC应用程序都从CWinApp派生一个Class。根据应用程序框架(Framework)的种类,应用程序的对象(Object)要完成以下工作:
(1) 初始化(Initialize)应用程序
(2) 建立Document Template结构
(3) 循环检索Message Queue中的Message并派送这些Message到相应的地方
(4) 当应用程序退出时要进行”清理”工作

2、CDocument, 它是使用Document/View结构的应用程序中的Document的基类。这里的Document代表程序中的数据,是一个抽象概念,我们在开发程序时必须考虑数据如何储存到Document中。

3、CCmdTarget,它是MFC的Message映射的基础Class,从CCmdTarget派生的类可以成为Command Messages的目标。Command Messages是指由用户选择菜单或按钮等行为产生的Messages。

4、CWinThread,它的成员函数可以使MFC应用程序创建和管理线程。

三、用户界面(User-Interface) Classes

  用户界面Classes主要包含Windows-based应用程序的一些可视性元素,例如:窗口、菜单、对话框、控件(Control)等,它还封装(Encapsulate)了Windows Device Context对象和Graphics Device Interface(GDI)对象。

用户界面Class包括CWnd, CView, CGdiObject和Menu这几个主要Class:

CWnd,它是所有MFC Windows的基类,它定义了Window的基本功能和Window对大部分Message的默认响应。CWnd可以直接用来派生其他Class,但通常情况下,Class是从CWnd派生的Class派生的,从CWnd派生的Class主要有:
CFrameWnd,主要用于单文档界面(Single Document Interface, 例如写字板之类的程序,一次只能打开一个Window);
CControlBar,是工具栏,状态栏等控件的基类;
CDialog,提供对话框的功能;
CButton, CListBox, CScrollBar等,主要用于按钮,列表框,滚屏栏等控件。

CView,是Document/View(一种应用程序的结构)应用程序的视图的基类;

CGidObject,它包含一些用于显示输出的对象(例如Pen, Brush, Font等),使MFC应用程序可以创建和使用这些对象。GDI最大的好处就是提供了设备无关性(Device-Independent),使到开发人员无需考虑不同设备的问题。

CMenu,主要用于提供菜单界面,通过CMenu,应用程序可以在运行时动态改变菜单的内容。

四、常规用途(General-Purpose) Classes

General-Purpose Classes包括各种各样的数据类型,常用的有:
CFile,用于文件的输入/输出
CString,用于管理字符串变量
CException,用于处理Exception
CByteArray, CIntArray, CStringArray, CStringList, CObList, 用于数据结构,例如数组和列表
CPoint, CSize, CRect, CTime, CTimeSpan,杂项

五、ActiveX Classes

ActiveX Classes可以简化ActiveX的编程和ActiveX API的访问,ActiveX的主要作用和功能是:
创建ActiveX控件和ActiveX控件容器
通过自动化(Automation),是一个程序控制另一个程序
创建包含有多种数据类型(例如文字、图片、声音等)的文档,既复合文档
创建可以嵌入复合文档的OLE Object
使用拖放(Drag-and-Drop)方式可以在两个应用程序之间复制数据

ActiveX Class的分类如下:

ActiveX Control Classes
包括COleControlModule, COleControl, CConnectionPoint, CPictureHolder, CFontHolder, COlePropertyPage, CPropExchange, CMonikerFile, CASyncMonikerFile, CDataPathProperty, CCachedDataPathProperty, COleCmdUI, COleSafeArray

Active Document Classes
包括CDocObjectServer, CDocObjectServerItem

ActiveX-related Classes
包括COleObjectFactory, COleMessageFilter, COleStreamFile, CRectTracker

Automation Classes
包括COleDispatchDriver, COleDispatchException

Container Classes
包括COleDocument, COleLinkingDoc, CDocitem, COleClientItem

OLE Server Classes
包括COleServerDoc

OLE Drag-and-Drop And Data Transfer Classes
包括COleDropSource, COleDataSource, COleDropTarget, COleDataObject

OLE Common Dialog Classes
包括COleDialog, COleInsertDialog, COlePasteSpecialDialog, COleLinksDialog, COleChangeIconDialog, COleConvertDialog, COlePropertiesDialog, COleUpdateDialog, COleChangeSourceDialog, COleBusyDialog

创建ActiveX比较难,我会在”提高篇”中详细讨论的。

六、数据库(Database) Classes

  数据库编程是非常枯燥的,但我们不得不承认数据库非常有用,连接数据库然后访问数据是常用的数据库编程方法。MFC提供了一些类,这些类可以通过开放式数据库连结(Open Database Connectivity, 即ODBC)和数据访问对象(Data Access Object, 即DAO)来操作数据库。

Database Classes主要包括CDatabase, CDaoDatabase, CRecordset, CDaoRecordset。

CDatabase或CDaoDatabase的Object代表一个和数据源(Data Source)的连接,通过这个Object就可以操作数据源了。这里的数据源是指数据库中的数据的实例(Instance)。

CRecordset或DaoRecordset的Object代表从数据源中选中的数据的集合,叫做Recordset。CRecordset和DaoRecordset的Object有两种形式:
Dynasets, 动态的,假如数据库被更新,Recordset也同步被更新;
Snapshot,静态的,它只反映了在Recordset被调用时的状态,不会随着数据库的更新而更新。

CDaoRecordset还可以直接代表数据库的表(Table)。

七、Internet Classes

  Internet Classes不但可以用于Internet,还可以用于Intranet(企业内部网)。MFC包括WinInet APIs(提供客户端的Class)和Internet Server API(即ISAPI,提供服务器端的Class)。

客户端的Class主要有以下几个:

CInternetSession, 创建并初始化一个或多个同步的Internet Session(会话),它有3个主要函数GetHttpConnection, GetFtpConnection和GetGopherConnection(这3个函数的作用大家可以顾名思义)。

CHttpConnection, 管理应用程序对HTTP服务器的连接。

CFtpConnection, 管理应用程序的FTP连接,它包含了一些用于搜索远程目录和文件的函数。

CGopherConnection,管理应用程序的Gopher连接,它也包含了一些用于搜索不同类型文件的函数。

CFileFind,它是CFtpFileFind和CGopherFileFind的基类,提供了搜索和定位的功能,并可返回文件的信息,它们都还支持通配符查询。

服务器端的Class主要有以下几个:

CHttpServer, 可用于创建和管理一个服务器扩展(Server Extension)DLL,也叫做Internet服务器应用程序(Internet Server Application,即ISA)。ISA一般用来扩展一个Internet服务器的能力。

CHttpServerContext, 被CHttpServer用来封装单个客户端请求的实例(Instance)。

CHttpFilter, 这个Class可以用来创建一个具有过滤客户数据功能的DLL。

CHttpFilterContext,被CHttpFilter用来封装单个客户通知(Notification)的实例(Instance)。

CHtmlStream, 封装HTML数据缓冲区(Buffer),该Buffer是被CHttpServer用来应答客户的。

八、全局Afx函数(Global Afx Functions)

  Global Afx Functions不属于任何Class,它们以Afx开头,可以在应用程序的绝大多数地方被直接调用(这点和Class的成员函数有很大不同)。常用的全局Afx函数有:

AfxAbort(), 无条件中断应用程序

AfxMessageBox(), 显示一个消息框

AfxGetApp(), 返回一个指向Project的CWinApp Object的指针

AfxGetAppName(), 返回应用程序的名字,类型为一个指向字符串的指针

AfxGetMainWnd(), 返回指向主框架窗口(Main Frame Window)的指针

AfxGetInstanceHandle(), 返回当前应用程序的实例(Instance)的句柄(Handle),即HINSTANCE


名词
派生 = Derive
连续化 = Serialization
对象 = Object
集合类 = Collection Classes
框架 = Frame
框架 = Framework
重载 = Override
初始化 = Initialize
Document
Command Messages
封装 = Encapsulate
控件 = Control
设备环境 = Device Context
图形设备接口 = Graphics Device Interface (GDI)
单文档界面 = Single Document Interface
设备无关性 = Device-Independent
异常或例外 = Exception
ActiveX控件 = ActiveX Control
ActiveX控件容器 = ActiveX Control Container
自动化 = Automation
拖放 = Drag-and-Drop
数据源 = Data Source
实例 = Instance
企业内部网 = Intranet
客户端 = Clien-Side
服务器端 = Server-Side
会话 = Session
服务器扩展 = Server Extension
Internet服务器应用程序 = Internet Server Application,即ISA
通知 = Notification
缓冲区 = Buffer
主框架窗口 = Main Frame Window
实例 = Instance
句柄 = Handle

 

阅读(1534) | 评论(0) | 转发(0) |
0

上一篇:Carchive按行读txt文件

下一篇:关于CString

给主人留下些什么吧!~~