荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: zzt (好好学习,天天向上), 信区: Program
标 题: [转载] MFC四大天王(四)--Dissecting MFC cudo (转寄)
发信站: BBS 荔园晨风站 (Thu Mar 2 16:10:29 2000), 转信
【 以下文字转载自 zzt 的信箱 】
【 原文由 zhuzutao.bbs@smth.org 所发表 】
发信人: magiceye (世纪末的风), 信区: VisualC
标 题: MFC四大天王(四)--Dissecting MFC
发信站: BBS 水木清华站 (Wed Nov 24 12:31:21 1999)
■Dissecting MFC
作者:侯俊杰
出版公司:松岗
出版日期:1996/10
页数:13 章,778 页
售价:NT$ 860.00。含光碟一片。
第一篇 勿在浮砂 高台 - 技术前提
1. Win32 程式基本观念
2. C++ 的重要性质
3. MFC 六大关键技术之模拟
第二篇 Visual C++ v4.0 开发工具
4. Visual C++ - 整合性软体开发环境
第叁篇 浅出 MFC 程式设计
5. 总观 Application Framework
6. MFC 程式设计导论 - MFC 程式的生与死
7. 一个简单而完整的 MFC 骨干程式
第四篇 深入 MFC 程式设计
8. Document-View 深入探讨
9. 讯息映射与绕行
10. 对话盒与 DDX/DDV
11. View功能之加强与重绘效率之提升
12. 印表与预视
13. 多重文件与多重显示
Appendix A: 从摇篮到坟墓 - Windows 的完全学习
Appendix B: Scribble Step5 程式原始码列表
Appendix C: Visual C++ 所附范例程式一览
Appendix D: OWL 程式设计一览
我谈这本书,可能会被讥以「分身替本尊说话」,但为了举荐好书,以及秉持外举不避
仇、内举不避亲的原则,我不想闪躲。
这本书目前只有中文版。已经有国内出版社积极表达争取出版英文本的意愿。大陆方
面,则有多家出版社亟愿将此书译为简体版,甚至直接 Email 与作者联络。这本就是前
阵子在 BBS 上引起众多讨论的「深入浅出 MFC」,Dissecting MFC。
依我看,本书横亘在 Inside Visual C++ 和 MFC Internals 两书之间,有
InsideVisual C++ 的实用面,而在核心技术更擅胜场。有 MFC Internals 的深入
面,而无其过於晦涩。
所谓核心技术,本书指的是:
1. 应用程式和 MFC framework 的因果关系。这一部份是你学习MFC 程式设计的
成败关键。因为太多人上不了第一个台阶。本书把隐藏的 WinMain 函式、视窗类别注册、
视窗诞生、讯息回路等动作统统挖掘出来,让属於 framework 的那半边曝光,和你的应
用程式码这半边拼兜出一张完整的逻辑脉络图。才不会堆积木老是少一块。
2. 讯息映射(Message Mapping)和命令绕行(Command Routing)。「物件导
向」从来没有考虑过 Windows 讯息(那当然)。MFC 程式有四大类别(application、
frame、document、view),程式员最容易陷入的苦恼是不知道在哪一个类别中拦截并
处理命令讯息。那是因为没有能够看清楚讯息在类别中的流动路线。流动路线的整个地图
隐隐在巍巍山巅:在由 DECLARE_MESSAGE_MAP、BEGIN_MESSAGE_MAP、
END_MESSAGE_MAP 以及其他的 ON_COMMAND、ON_WM_PAINT 等巨集架构起来的巨大
网络中。当你的程式一开始执行,整个 MFC 的绝大部份类别,都已经贡献出一些资料,
组成这张巨幅网络(噢,是的,当然也耗用了你的记忆体)。
3. Document/View/Template 之间的关系。一个程式如果支援两份以上的
Documents,应该如何管理?对应的使用者介面应该如何设定?Document Template 究
竟是何用途?这是这个主题要探讨的题目。
4. Runtime Type Information(RTTI)和 Dynamic Creation。把一份
document 写入档案之中,连同类别名称和成员变数的值,没有问题。是的,一点问题也
没有,但是读出来就有问题了,因为你不可能读一个类别名称到一个字串中然後对这个字
串做 new 动作。「从档案读出类别名称然後产生其物件」,就是 "dynamic creation"
的具体表现。C++ 不支援这项能力,但 MFC 非要不可,因为有太多时候需要 dynamic
creation。其实你只要使用笨方法如下,就可以解决 dynamic creation 的问题:
read ClassName to str
if (str == "Class1")
new Class1;
else if (str == "Class2")
new Class2;
else if (str == "Class3")
new Class3;
else if (str == "Class4")
new Class4;
...
MFC 小组比我们聪明吗?不会。但是他们比我们懂得包装。他们在MFC framework 中
架构起一个由所有类别相关资讯(包括类别名称及建构函式)组成的类别型录网络(一个
串列),然後把类别名称的比对动作埋藏在 Serialize 虚拟函式中。类别型录网络中的
每一个成员就是 CRuntimeClass 物件,网络的组成则是藉由类别宣告时的
DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE 巨集完成。RUNTIME_CLASS巨集
就是取出「类别型录网络」中的一个元素(代表一个类别)。所以,当你的程式一开始执行
,
整个 MFC 的绝大部份类别,都已经放在这个「类别型录网络」之中(噢,是的,当然也
耗用了你的记忆体)。有了这网络,RTTI(执行时期型别辨识)和 Dynamic Creation
都不是问题。
5. Persistence。文件内容要用什麽型式写到档案去,才能够再从档案读出来恢复
为一个个的物件?这就是 persistence(MFC 称之为 serialization)要探讨的题
目。本书把 Serialize 虚拟函式的内部行为全部挖掘出来,并且实际观察一个文件档的
hex 倾印内容。
这五个部份是本书最精华的地方,也是它独步全球的地方。要有这麽深入的了解,非
得观察 MFC 原始码不可。本书把相关的 MFC 码整理出来,加上相当多的示意图,MFC
Internals 虽然挖得更广,整理的功夫却没有这本好。
这本书用词相当精准。用词精准在容易岐路的物件导向领域中至为重要,许多细微的
观念就在字句推敲中成形。
实例方面,希望看到琳琅满目的范例程式的读者,将会大失所望。这本书使用Visual
C++ 的标准范例 Scribble。只有第 13 章「多重文件与多重显示」中才有作者自己设
计的程式。然而以Scribble 为范例主轴,有一个意想不到的好处:常看 Microsoft
Systems Journal 或 Windows Developer's Journal 的朋友就知道,许多作家
喜欢在示范新技术或新构想时,以 Scribble 为载具。如果你对Scribble 十分熟悉,
阅读那些文章可就驾轻就熟了。
本书的许多精心插图,是令人惊喜的地方。一图解千言万语,在这里获得最佳注脚。
我偷窥了一封读者写给本书作者的信,信上这麽说:『当我在书店中驻足察看这本书五
分钟之後,我便知道这本书是一定要买下的。我一鼓作气将这本书给读完了,而且是彻彻
底底地读了两遍。...我个人特别喜欢第叁章:MFC 六大关键技术之模拟。这章内容的设
计的确是要在 MFC 丛林中,大刀阔斧地披露出最重要的筋络,我相信这正是所有学习 MFC
的人所需要的一种表明方式。对我而言,以往遗留的许多疑惑,在此都一一得到了解答。
最重要的是,您曾在说到,学习 MFC 的过程中最重要的莫过於自我审视 MFC 程式码的
能力。很高兴地,在我看完本书之後,我确实比以前更有能力来看 MFC原始码了。总之,
我为自己能够更深入了解 MFC 而要向你说声谢谢。』
作者因为这封令人感动的信,当天又多熬夜叁个小时。不要问我是怎麽知道的 :-)。
--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 210.32.132.191]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.11]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店