按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
1997 年五月推出的Visual C++ 5。0 ,主要诉求在编译器的速度改善,并将Visual C++ 合
并到微软整个Visual Tools 的终极管理软件Visual Studio 97 之中。所有的微软虚拟开
发工具,包括Visual C++ 、Visual Basic 、Visual J++ 、Visual InterDev 、Visual FoxPro 、都
在Visual Studio 97 的整合之下有更密切的彼此奥援。至于程序设计方面,MFC 本身没
有什么变化(4。21 版),但附了一个ATL (Active Template Library )2。1 版,使ActiveX
控制组件的开发更轻松些。
我想你会发现,微软正不断地为「为什么要使用MFC 」加上各式各样的强烈理由,并强
烈导引它成为Windows 程序设计的C++ 标准接口。你会看到愈来愈多的MFC/C++ 程
式码。对于绝大多数的技术人员而言,Application Framework 的抉择之道无它,「MFC
是微软公司钦定产品」,这个理由就很呛人了。
纵览 MFC
MFC 非常巨大(其它application framework 也不差),在下一章正式使用它之前,让我
们先做个浏览。
请同时参考书后所附之MFC 架构图
329
…………………………………………………………Page 392……………………………………………………………
第篇 湷觥 FC 程式設計
MFC 类别主要可分为下列数大群组:
■ General Purpose classes 提供字符串类别、数据处理类别(如数组与串行),异
常情况处理类别、文件类别。。。等等。
■ Windows API classes 用来封包Windows API ,例如窗口类别、对话框类别、
DC 类别。。。等等。
■ Application framework classes 组成应用程序骨干者, 即此组类别, 包括
Document/View 、消息邦浦、消息映射、消息绕行、动态生成、文件读写等等。
■ high level abstractions 包括工具栏、状态列、分裂窗口、卷动窗口等等。
■ operation system extensions 包括OLE、ODBC 、DAO 、MAPI 、WinSock、ISAPI
等等。
General Purpose classes
也许你使用MFC 的第一个目标是为了写Windows 程序,但并不是整个MFC 都只为
此目的而活。下面这些类别适用于Windows ,也适用于DOS。
CObject
绝大部份类别库,往往以一个或两个类别,做为其它绝大部份类别的基础。MFC 亦复如
此。CObject 是万类之首,凡类别衍生自CObject 者,得以继承数个对象导向重要性质,
包括RTTI (执行时期型别鉴识)、Persistence (对象保存)、Dynamic Creation (动态生
成)、Diagnostic (错误诊断)。本书第3章对于这些技术已有了一份DOS 环境下的模
拟,第8章另有MFC 相关源代码的探讨。其中,「对象保存」又牵扯到CArchive,「诊
断」又牵扯到CDumpContext,「执行时期型别鉴识」以及「动态生成」又牵扯到
CRuntimeClass。
数据处理类别 (collection classes)
所谓collection,意指用来管理一「群」对象或标准类型的资料。这些类别像是Array 或
330
…………………………………………………………Page 393……………………………………………………………
第5章 總觀Application Framework
List 或Map 等等,都内含针对元素的「加入」或「删除」或「巡访」等成员函数。Array
(数组)和List (串行)是数据结构这门课程的重头戏,大家比较熟知,Map (可视之
为表格)则是由成双成对的两两对象所构成,使你很容易由某一对象得知成对的另一物
件;换句话说一个对象是另一个对象的键值(key )。例如,你可以使用String…to…String
Map ,管理一个「电话…人名」数据库;或者使用Word…to…Ptr Map ,以16 位数值做为
一个指针的键值。
最令人侧目的是,由于这些类别都支持Serialization,一整个数组或串行或表格可以单一
一进程序代码就写到文件中(或从文件读出)。第8章的Scribble Step1 范例程序中你就会
看到它的便利。
MFC 支持的collection classes 有:
CObject
CObject
CArray (template) CList (template) CMap (template)
CArray (template) CList (template) CMap (template)
CByteArray CPtrList CMapWordToPtr
CByteArray CMapWordToPtr
CDWordArray CObList CMapPtrToWord
CDWordArray CObList CMapPtrToWord
CObArray CStringList CMapPtrToPtr
CObArray CStringList CMapPtrToPtr
CPtrArray Lists of user types CMapWordToOb
CPtrArray Lists of user types CMapWordToOb
CStringArray CMapStringToPtr
CStringArray Typed Template Collections CMapStringToPtr
CUIntArray CTypedPtrArray CMapStringToOb
CUIntArray CTypedPtrArray CMapStringToOb
CWordArray CTypedPtrList CMapStringToString
CWordArray CTypedPtrList CMapStringToString
Arrays of user types CTypedPtrMap Maps of user types
Arrays of user types CTypedPtrMap Maps of user types
杂项类别
■ CRect 封装Windows 的RECT 结构。这个类别在Windows 环境中特别有用,
因为CRect 常常被用作MFC 类别成员函数的参数。
■ CSize 封装Windows 的SIZE 结构。
■ CPoint 封装Windows 的POINT 结构。这个类别在Windows 环境中特别有用,
331
…………………………………………………………Page 394……………………………………………………………
第篇 湷觥 FC 程式設計
因为CPoint 常常被用作MFC 类别成员函数的参数。
■ CTime 表现绝对时间, 提供许多成员函数, 包括取得目前时间( static
GetCurrentTime)、将时间资料格式化、抽取特定字段(时、分、秒)等等。它
对于+ 、…、+= 、…+ 等运算子都做了多载动作。
■ CTimeSpan 以秒数表现时间,通常用于计时码表。提供许多成员函数,包括把
秒数转换为日、时、分、秒等等。
■ CString 用来处理字符串。支持标准的运算子如= 、+= 、《 和》 。
异常处理类别 (exception handling classes)
所谓异常情况(exception ),是发生在你的程序执行时期的不正常情况,像是文件打不
开、内存不足、写入失败等等等。我曾经在第2章最后面介绍过异常处理的观念及相
关的MFC 类别,并在第4章「Exception Handling」一节介绍过一个简单的例子。与「异
常处理」有关的MFC 类别一共有以下11 种:
CException
CException
CArchiveException
CArchiveException
CDaoException
CDaoException
CDBException
CDBException
CFileException
CFileException
CMemoryException
CMemoryException
CNotSupportedException
CN