“本书绝对不是对现有文档的重新组织,也不是一本教你如何去做的书,而是一本告诉你MFC是如何运作的书。”
——Dean McCrory,MFC开发组负责人
这是一本填补“使用向导”类的VisualC++书籍、产品文档以及MFC源代码之间空隙的MFC书籍。本书是了解MFC内幕的向导,提供了关于那些没有文档记录的MFC类、实用函数和数据成员的独一无二并且透彻的信息,介绍了有用的编码技巧,并对MFC各个类之间的协作方式进行了重要的分析。
前言
致谢
简介
第1章 MFC的概念性总括
面向对象编程的一些背景
面向对象编程术语
通常的对象
对象与C++
为什么使用OOP
应用程序框架与MFC
MFC要点之旅
结语
第2章 基本的Windows支持
MFC与C/SDK
基本的MFC应用程序组件
现在, 找到WinMain()
一些其他隐藏的信息
MFC对GDI的支持
结语
第3章 MFC中的消息处理
CCmdTarget和消息映射表
窗口消息
MFC消息映射内幕
MFC如何使用消息映射表
进入消息循环:PreTranslateMessage()
结语
第4章 MFC实用类
简单值类型
MFC的集合类
CFile家族:MFC对文件的访问
CExcephon:提供更好的错误处理
结语
第5章 CObject
使用CObject的代价
CObject的特性
宏的介绍
运行时类的信息
MFC中的持续性
CObject对诊断的支持
CObject的诊断支持内幕
组合在一起
投入使用
是否值得
结语
第6章 MFC对话框和控件类
CDialog:模态MFC对话框和非模态MFC对话框
MFC公用对话框
OLE对话框
属性页(也称带标签的对话框)
MFC控件类
结语
第7章 MFC的文档/视图结构
为什么要用文档/视图
其他原因
旧的方法
体系结构
文档/视图结构内幕
文档舰图内幕再览
结语
第8章 高级文档舰图结构内幕
CMirrorFile
CView打印
CView对打印预览支持的内幕
CView的派生类:CScrollView
CView的另一个派生类:CCtrlView
结语
第9章 MFC的增强型用户界面类
CSplitterWnd:MFC分割窗口
MFC的CControlBar体系结构
CMiniFrameWnd
MFC的MRU文件链表实现
结语
第10章 MFC的DLL与线程
理解状态
MFC的DLL
MFC线程
结语
下一章
第11章 用MFC实现COM
MFC和OLE
COM
何为COM类
COM接口
GUID
剖析IUnknown接口
COM对象服务器
拥有多个接口的COM类
MFCCOM类
使用MFC创建CoMath
MFCCOM和接口映射宏
使用MFC的CoMath类
完成服务器的设计
MFC对类厂的支持
结语
第12章 统一数据传输和MFC
历史回顾
重要的结构
IDataObject接口
OLE剪贴板
MFC的IDataObjeot类
延迟供应
深入了解MFC的IDataObject类
OLE拖放
结语
第13章 使用MFC实现OLE文档
OLE文档101
MFC对OLE文档的支持
使用MFC实现OLE文档服务器
容器朋艮务器的协调工作
使条目无效
保存容器的文档
装载OLE文档
结语
第14章 MFC与自动化
自动化的历史
自动化的功能
使用MFC实现自动化应用程序
自动化的工作机制
COM接口与自动化
实现自动化的另外一种方法:使用类型信息
MFC与自动化
结语:使用"MFC方式"的结果
第15章 OLE控件
VBX及其缺陷
OLE控件
写一个OLE控件
在工程里使用OLE控件
它是如何工作的
MFC和OLE控件的容器
OLE控件的生存周期
OLE连接
OLE控件的事件
MFC如何处理事件
技巧:在一个视图中加入一个事件接收器
OLE控件的属性页
结语
附录A MFC源代码导读
MFC编码技术
探索MFC的工具
MFC源代码指南
愉快的旅途
附录B 本书的示例代码
术语表
自从MFC 1.0于1990年发布以来, 微软基础类(Microsoft Foundation Class)(现在是4.0版了)已经发展成为性能完全.健壮.口碑甚佳.使用广泛而且非常复杂的应用程序框架.对于我们这些一直跟着它发展的人, 凭借使用以前版本MFC的历史和经验还能帮着减轻一点复杂度.而对于今天刚开始学习MFC的新手, 学起来就太困难了.进入MFC的天堂需要不懈的努力——使用MFC写代码, 并且大量地阅读.
当然, VisualC什(和其他获得MFC许可的C抖产品)都带有介绍MFC库的参考文档和概念信息.也有很多第三方写的书讲授如何使用MFC创建Windows应用程序.然而, 所有这些知识源都把焦点集中在如何使用MFC上:调用什么.重载什么.怎样激活特定的特性.在几个流行的在线论坛上, 已经就是否有必要在文档之上理解MFC的实现这个问题展开过几次有趣的讨论.我的观点是, 要成为一个真正的MFC专家, 你必须理解MFC的实现.对任何问题的最终回答常常是在源代码本身中找到的.这也是MFC提供源码的主要原因之一.
实际上, 阅读源代码是我开始学习MFC的方法.我这样做部分是因为有必要, 部分是出于我的天性.我介入MFC是从它的一个内部A1pha版开始的, 这还是在Microsoft C/C++7.0开发过程中发布的.当时还没有MFC的文档, 甚至CodeView也还不能处理C++代码.文档的匮乏没有带给我很大麻烦, 因为我很想知道一切到底是怎么工作的.我一直问类似这样的问题:“MFC在处理Windows消息时怎么调用我的C什成员函数?”, “MFC的异常处理是如何实现的?”(当时Microsoft C++的编译器还不支持异常处理).因此, 我开始浏览代码, 试图理解它.但是, 是不是每个使用MFC的人都必须这么做?是不是每个人都有这么多时间?可能不是——有的人需要享受生活!
即使你有足够的时间来研究一摞一摞的MFC源代码, 这本书也可以引导你了解哪里有些什么.Scot和George做了相当出色的工作, 分析了MFC的源码, 在本书中对MFC的很多关键的实现细节提供了解释.实际上, 很多次我曾经试图写这样的一本书, 但是我总是忙于挖掘MFC的新版本, 没有这么多时间来创作这样一本书.幸运的是, 我还有时间看完这本书, 并且提供一点我的看法.
本书绝对不是对现有文档的一个重新组织, 也不是一本教你如何去做的书, 而是一本告诉你MFC是如何运作的书.很多章节都以类似这样的话开始:“下面的声明已经去掉了所有有文档说明的成员函数, 我们将注意力集中在没有文档说明的实现细节上.”这些实现细节会令你明白某个类内在的一些性质和限制, 即使这些可能在类的公共接口中不出现.这些细节以及它们如何影响你的应用程序的知识会影响你在自己代码中使用这些类的方式.当你真正坐下来写一个应用程序时, 这些都是非常重要的细节.此外, 有些细节可能只是为了趣味或展示一些你可能希望在自己的程序中使用的C++技术(或者是你要避免的技术).不过作者并没有揭示所有有趣的东西, 有些东西留给读者自己去挖掘.在读了本书中的大量分析之后, 你应该已经有能力自己探究这里没讲到的主题.掌握这个技能十分重要——很多在流行的在线服务上问到的问题(甚至在微软内部问到的问题)都可以通过简单地浏览MFC代码而得到解答.
简而言之, 本书是所有严谨的MFC开发人员的必备之作.实际上, 微软内部的MFC开发.质量保证.用户培训小组的所有新老成员都应该读一读这本书.