分类: C/C++
2007-11-16 21:27:36
一、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