发信人: vbman()
整理人: softlag(2000-05-29 12:03:09), 站内信件
|
RunPC 1997.02 无责任书评
Inside Visual C++ 4.0
Programming Windows 95 with MFC
MFC Internals
Dissecting MFC(深入浅出 MFC)
关于 MFC 这一主题,
在「沧海书讯」版上曾经被讨论过的书籍有四本,
正是我所列出的这四大天王。
看来我心目中的好书颇能吻合市场的反应。
我还记得,无责任书评是在四年前(1993)开春时和大家第一次见面。虽然不是 每个月
都出货,但断断续续总保持着讯息。在明确宣布的情况下这个专栏曾经停过两次 ,第一
次停了三个月,于 1994 年开春复工;第二次停了十五个月,于 1997 年开春的 今天,
重新与各位说哈啰。
休息整整一个年头又三个月,写作上的疲倦固然是因素之一,另外也是因为这个 专栏直
接间接引起的让人意兴阑珊的俗人俗务。读者写信来说,『总把无责任书评当成 休闲散
文看。或许您可以考虑写些休闲小品,定会畅销』,是呀,我正构思把因这个专 栏而获
得的人生经验写成一本「现形记」。可是不知道手上「正当」工作什么时间才能 告一段
落,写起我的小说。也不知道什么样的出版社有兴趣侯捷写的小说。
倦勤与无奈过去了,满腔读书心得沛然欲发。所以,我又拿起笔「无责任」了。 感觉有
点陌生,但是回顾读者们这一年写来的上百封信,让我意气昂扬。这个月我谈的 是
Visual C++ 与 MFC。此题目我已提过两次。一来它十分重要,演化的过程也十分 快速
而明显,二来这个领域又有一些重量级书籍出现,所以我必须再谈一次。
另外,我还是得再强调,侯捷的专长领域有限,离我火力太远的书我只能远观不 敢近
玩。这个专栏用在拋砖引玉,让谈书成为一种风气。Windows Developer's Jour nal
(WDJ)的 Books in Brief 专栏原先也是主持人 Ron Burk 唱独角戏,后来(现 在)
就有了许多读者的互动。我也希望这样的事情在这里发生。
●必也正名乎
常在 BBS 的程式设计相关版面上看到,许多人把 Visual C++ 和 C++ 混淆不清 ,另则
是把 Visual C++ 和 MFC 混为一谈,实在有必要做个厘清。C++ 是语言,Visua l C++
是产品。『我们学校开了一门 Visual C++ 的课程』这种说法就有点奇怪,实际 意义是
『我们学校开了一门 C++ 课程,以 Visual C++ 为软体开发环境』。『我会写 Visual
C++ 程式』这种说法也很怪,因为Visual C++ 是 C/C++ 编译器,你可以在这套 整合开
发环境中使用 C 语言或 C++ 语言写出 DOS 程式或 Windows 程式;如果是 Win dows
程式,还可以分为 Windows API programming 或MFC programming。所以「我会 写
Visual C++ 程式」表达不出你真正的程度和意思。
Visual C++ 是一套 C/C++ 编译器产品,内含一套整合开发环境(Integrated
Development Environment,IDE),也就是 AppWizard、ClassWizard、编译器、 联结
器、资源编辑器等工具的大集合。你知道,真正的 C++ 程式(而不是披着 C++ 外衣的
C 程式)是以一个个类别(class)堆砌起来的,为了节省程式员的负担,几乎每 一家
编译器厂商都会提供一套现成的类别库(class libraries),让程式员站在这个 基础
开发应用软体。MFC 就是这样一套类别库。如果以物件导向的严格眼光来看,MF C 是比
类别库更高一级的所谓 application framework。PC 上另两套与 MFC 同等地位 的产品
是 Borland 的 OWL 和IBM 的 OpenClass,前者搭配的开发环境是 Borland C++ ,后者
搭配的是 VisualAge C++。其他的 C++ 编译器大厂如Watcom 和 Symantec 和
Metaware,并没有开发自己的类别库,他们向微软取得 MFC 的使用授权,提供 MFC 的
原始码、含入档、相容的编译器和联结器。噢是的,他们要求授权的对象是 MFC ,而不
是 OWL,这就多少说明了 MFC 和 OWL 的市场占有率。
产品名称 厂商 application framework
Visual C++ Microsoft MFC
Borland C++ Borland OWL(最新版据说也提供 MFC)
VisualAge C++ IBM OpenClass
Symantec C++ Symantec MFC
●沧海书讯
清大 BBS 站台(枫桥驿站,IP 位址为 140.114.87.5),在「分类讨论区」的「 电脑
与资讯」区之下,有一个「沧海书讯」版,对电脑书籍有兴趣的朋友可以去看看 。这里
并没有(还没有)类似正规书评之类的文章出现,比较多的是读者们对于坊间书 籍的阅
后感,以及新鲜读者的求助函(找某一主题的好书啦、谁要卖书啦、谁要买书啦 等
等)。
关于 MFC 这一主题,在沧海书讯版上曾经被讨论过的书籍有四本,正是我所列出 的这
四大天王。看来我心目中的好书颇能吻合市场反应。这四本书各有特点,色彩鲜 明,统
统值得收藏。
●四大天王
一本书能够有被收藏的价值,可不简单唷,我不能乱说嘴。诸君,看看我列的理 由吧。
这四大天王是:
◎Inside Visual C++ 4.0
在四大天王中本书名列老大哥,我这么排名和天王的「色艺」无关,敬老尊贤的 成份多
一些。它已是同一本书的第三版,所以才会在书名冠上软体版本号码(上一版名 为
Inside Visual C++ 1.5)。书名冠上软体版本号码的另一个因素是,本书在教导 我们
开发程式时,是 "tool-oriented"(以工具为导向),你会看到像「先按下这个 钮,然
后填写这一小段码,然后在清单中选择这一项,再回到右边的视窗上...」这样的 文字
说明,所以 Visual C++ 的版本更迭攸关全书内容。
这就引出了本书在程式诱导方面的一个特征:工具的使用占了相当吃重的角色。 工具的
使用难度不高,但非常繁多(从 Visual C++ 新鲜人的眼光看可能是...呃...非 常杂
乱)。又要学习 MFC,又要配合工具的使用,对初学者而言是双倍负担。我曾经 在 BBS
上看到一封信,抱怨 Inside Visual C++ 虽是名著,他却完全看不懂。呵,我完 全能
够了解 -- 我不是那种自己懂了之后就忘记痛苦的人。
入选原因:老字号,范例程式内容丰富,220 页的 OLE 和 110 页的 Database 是本地
唯有的大独家,别处找不到。
◎Programming Windows 95 with MFC
Ray Duncan(侯捷极为尊敬的一位老牌作家,近年似乎淡出,没有什么新作品) 曾经
说,这本书是 "the Petzold for MFC programming",俨然有 Petzold(注)接 班人之
势。从其主题的安排,甚至从书籍封面的安排,在在显示「接班人」的讯息。而 它的内
容可以证明Ray Duncan 的推荐并不虚佞。
注:Charles Petzold 是 "Programming Windows 95" 一书的作者。该书是SDK 程式设
计宝典。这本书近来没有那么轰动以及人手一册了,因为 MFC 或 OWL 这类 fra mework
产品不断精进,Delphi、C++Builder 这类快速程式开发工具(Rapid Applicati on
Development,RAD)不断进逼,SDK 程式设计的角色有点像组合语言了。不过我 告诉
你,学会它,绝对让你层次不同 -- 不只在程式设计的层次,还在对作业系统的 了解层
次。
这本书在程式设计的诱导方面,与 Inside Visual C++ 一书有极大的作法差异。 本书
没有任何一个程式以 Wizards 完成(我想作者必然曾经借重工具,只是最后再清 理一
遍),所以你不会看到像 file://{{ 和 }}// 这样的奇怪符号,以及一堆 #ifd ef、
#undef、#endif。「程式码是我们自己一行一行写出来」的这种印象,可能对于 消除初
学者的焦灼有点帮助。
入选原因:文字简易,观念清楚。从章节目录上你看不到非常特殊的主题,但隐 含在各
个小节之中有不少珠玉之言。平实稳健。对 MFC 核心观念如 Document/View、M essage
Map 的讨论虽然浅尝即止,但表现不俗。
◎MFC Internals
这是四大天王之中唯一不以教导 MFC 程式设计为目的的书。它的目的是挖掘 MF C 的黑
箱作业内容,从而让读者对application framework 有透彻的认识。这样的认识 对于
MFC 的应用面其实也是有帮助的,而且不小。
这本书挖掘 MFC 的原始码至深至多,最后还在附录A列出MFC 原始码的搜寻导引 。由
于解释 MFC 的内部运作原理,少不得就有一长串的「谁呼叫谁,谁又呼叫谁」的 叙
述。这种叙述是安眠药的最佳药引,所幸作者大多能够适时地补上一张流程图, 对于读
者的意识恢复有莫大帮助。
入选原因:独特而唯一。虽然并非初学者乃至中级程度者所能一窥堂奥,
却是所有资深的 MFC 程式员应该尝试读一读的书籍。
◎Dissecting MFC
这本书是应用面(各种 MFC classes 之应用)和核心面(隐藏在 MFC 内的各种 奇妙机
制)的巧妙混合。前一半篇幅为读者扎基础,包括 Win32、C++、MFC 程式的基础 技术
环节。后一半篇幅以著名的 Scribble 程式(随附于 Visual C++ 之中)为例, 从应用
面出发,却以深掘原理的核心技术面收场。看不到丰富绚丽的各种应用技巧,着 重在厚
植读者对于 MFC 核心技术的基础。
入选原因:本书挖掘的 Runtime Class、Dynamic Creation、Message Mapping、
Command Routing、Persistence 等主题,解说详实图片精采,拥有世界级水准。 SDK
程式员如果想进入 MFC 领域,这本书是最佳选择。看过 Inside Visual C++ 和
Programming Windows 95 with MFC 的读者,这本书会让你更上层楼,「知其然 并知其
所以然」。
■Inside Visual C++ 4.0
作者:David J. Kruglinski
出版公司:Microsoft Press
出版日期:1996 年初
页数:29 章,896 页
售价:US$ 45.00。含光碟一片。
PartI:Windows、Visual C++、and Application Framework Foundamentals
1. Microsoft Windows and Visual C++
2. The MFC Application Framework
PartII:The MFC Library View Class
3. Getting Started wwwith AppWizard - Hello World!
4. Basic Event Handling, Mapping Modes, and a Scrolling View
5. The Graphics Device Interface (GDI), Colors, and Fonts
6. The Modal Dialog and Windows 95 Common Controls
7. The Modeless Dialog and Windows 95 Common Dialogs
8. Using OLE Controls (OCXs)
9. Win32 Memory Management
10. Bitmaps
11. Windows Message Processing and Multithreaded Programming
PartIII:The Document-View Architecture
12. Menus, Keyborad Accelerators, the Rich Edit Control, and Property Sheets
13. Toolbars and Status Bars
14. A Reusable Frame Window Base Class
15. Separating the Document from Its View
16. Reading and Writing Documents - SDI
17. Reading and Writing Documents - MDI
18. Printing and Print Preview
19. Splitter Windows and Multiple Views
20. Context-Senssitive Help
21. Dynamic LInk Libraries (DLLs)
22. MFC Programs Without Document or View Classes
PartIV:OLE
23. The OLE Component Object Model (COM)
24. OLE Automation
25. OLE Uniform Data Transfer - Clipboard Transfer and Drag and Drop
26. OLE Structure Storage
27. OLE Embedded Servers and Containers
PartIV:Database Management
28. Database Management with Microsoft ODBC
29. Database Management with Microsoft Data Access Object (DAO)
Appendix A: A Crash Course in the C++ Language
Appendix B: Message Map Functions in MFC
Appendix C: MFC Library Runtime Class Identification and Dynamic Objec t
Creation
自从 application framework 兴起,在 raw API 程式设计之外,Windows 程式 员又找
到了一条新的途径。MFC「系出名门,血统纯正」,比之其他的 application
framework 产品自然是声势浩大,MFC 书籍也就因此比其他同等级产品的书籍来 得多得
多。
群雄并起之势维持没有太久,真正的好东西很快就头角峥嵘了。Inside Visual C++ 是
最早出线的一本。此书至今已是第三版,前两版分别针对 MFC 2.0(Visual C++ 1.0)
和 MFC 2.5 (Visual C++ 1.5)撰写。已有评论把此书与 Programming Window s 并
提,称之为 MFC/C++ 中的 Petzold 书籍(听起来犹如表界中的劳斯莱斯,车界 中的劳
力士)。Kruglinski 本人为了卡住这个尊崇的位置,甚至「于数年前的一个冬天 ,有
着风雪的傍晚,冒险进入纽约的 East Village,拜访 Windows 大师 Charles
Petzold,问他关于撰写 Programming Windows 的想法...」(语见本书之
Introduction 部份)。
Kruglinski 毫不隐藏他对 MFC 的热爱,他说这是他等了十年才盼到的软体开发 环境。
十年有点跨张,PC 的历史才多久?但 MFC 与 Visual C++ 整合环境之功能强大 却是不
假。这本书划分为四大篇。第一篇介绍 application framework 的观念以及 Vi sual
C++ 整合环境的各个工具元件。第二篇真正进入MFC 程式设计,不能免俗地从 " Hello
World" 开始,焦点放在视窗显示身上(也就是 CView 的运用)。作者尝试以 C ++ 和
MFC 完成一些功能简单的程式,像是简易绘图、图形卷动、字形输出、通用对话 盒与通
用控制元件、OCX 之使用等等。
第三篇才真正进入 MFC 的核心,也就是 Document-View 架构,这也是所谓
application framework 的最大特质。当你学会如何使用 Document 并且把它和 View
连接起来后,你会惊讶资料的档案动作和印表动作(包括预视功能)是多么容易 加入。
这一篇的章节包括漂亮迷人的 UI 元件如工具列、状态列、分裂视窗、求助系统 、属性
对话盒,以及 SDI、MDI、列印、预视、动态联结函式库等主题。
第四篇的五章谈的全部都是 OLE。不像一般书籍对于 OLE 蜻蜓点水,这一篇是道 道地
地的硬扎货色,范围包括COM(Component Object Model)、OLE Automation、U niform
Data Transfer、Structured Storage、Embedded Servers and Containers。
第五篇谈的全部是资料库管理。一章谈 ODBC(Open Database Connectivity), 另一
章谈 DAO(Data Access Objects)。
网路上一位读者抱怨说,本书虽是名著,他却完全看不懂。呵啊,一切都在意料 之内。
作者一开始就顾着给我们完全正规的作法,用 AppWizard 产生程式码,用
ClassWizard 改写虚拟函式、拦截讯息并撰写讯息处理常式。刚开始学习Window s 程式
设计的人,甚至已经有 SDK 经验但没有物件导向经验的人,根本昏头转向摸不着 头
绪。是的,学习MFC(或其他 Application Framework),先得有许多基础。包括 C++
语言基础、Windows 作业系统基础、物件导向程式观念的基础。
最新消息:本书第五版已有预告,书目上写的出版日期是97 年三月。以我对
Microsoft Press 出书进度的了解,届时可能咱们还需再等一等。新书内容并非 针对
Visual C++ 5.0,仍是以 MFC 4.x 为架构核心,但加了不少网路技术,如Basic
TCP/IP、Winsock programming for clients and servers、MFC WinInet、DocO bjects
and ActiveX controls 等主题。
■Programming Windows 95 with MFC
作者:Jeff Prosise
出版公司:Microsoft Press
出版日期:1996 第二季
页数:14 章,998 页
售价:US$ 49.95。含光碟一片。
PartI:MFC Basics
1. Hello, MFC
2. Drawing in a Window
3. The Mouse and the Keyboard
4. Menus
5. Controls
6. Dialog Boxes and Property Sheets
7. Timers and Idle Processing
PartII:The Document/View Architecture
8. Documents, Views, and Single Document Interface
9. Multiple Documents and Multiple Views
10. Printing and Print Previewing
11. Toolbars, Status Bars, and Versionable Schemas
PartIII:Advanced Topics
12. Bitmaps, Palettes, and Regions
13. The Common Controls
14. Threads and Thread Synchronization
每一位 MFC 书籍作者,最大的梦想就是其作品被誉为「C++ 中的Petzold 书籍」 。有
人亲访 Petzold,有人则搬出老天王来说几句话。老天王 Ray Duncan 这么说: "Jeff
Prosise has written the definitive introduction to Widnows software
development in the era of 32 bits and application frameworks. This boo k is
the Petzold for MFC programming"。这段话被当作本书的广告主打词。有趣的 是,尽
管万方争取,Petzold 本人倒是从来没有说过什么话。也许他想说的是『我自己 来写本
MFC 经典』,呵呵。
本书有没有接班人的能耐呢?有!和 Inside Visual C++ 比较,本书在低阶部份 照顾
得多些,程式细节则非常完备。别误会,我的意思并非说它是那种「把五句话可 以说清
楚的一段文字,以十句话来表达」的书籍(注),我是说它把各个技术主题挖得 很深
入,旁征博引的功夫很好,资料准备得很齐全。
注:另一位大师 Matt Pietrek 的书就有点这种拖拉味道,不过书仍然很棒就是 了。下
次我会介绍 Matt 的一本重量级作品。
本书在导入部份比 Inside Visual C++ 好。作者先安排一个极小的 SDK 程式, 解释
message-based、event-driven 的程式模型,然后再安排一个极小的 MFC 程式, 解释
framework 的运作,告诉你应该改写什么函式,标准作法如何,应该拦截什么讯 息,标
准作法又如何。虽然程式运行的脉络仍然不是十分清晰可寻,不过总算是表现不 错了。
从章节目录可以看出,这本书选题中规中矩,该有的没遗漏,大独家倒也没有。 注意,
所有的范例程式都没有说明其制作过程,只是列出原始码并以文字解释原始码的 意义。
你知道,视觉性软体开发过程中,工具的参与绝对少不了,而且角色日形吃重, 因此,
本书读者要自己想办法补足「工具的使用」这一节。Inside Visual C++ 就不一 样了,
几乎对于每一个程式,都详列出工具参与的足迹。
究竟工具的使用要在什么时候进场,才能够带来利益而不是沉重的盲与茫呢?我 以为作
者最好先给一个纯手工制造的MFC 程式,用来解释 MFC 程式的来龙去脉以及程式 和
application framework 的互动关系,然后再引进工具的使用说明,然后就安排 让工具
强力介入程式设计过程。毕竟,正规的、大型的 MFC 程式开发过程中少不了工具 的运
用。Inside Visual C++ 的作者操之过急,工具一下子全面介入,Programming Win95
with MFC 的作者又避若蛇蝎,完全舍弃工具。
过犹不及!这方面 Dissecting MFC 的作者就处理得不错。
这本书没有谈到当红的 OLE 和 ActiveX。关于这一点,Windows Developer's J ournal
(WDJ)的 Books in Brief 专栏(主持人是 Ron Burk)在 1996.10 有这么一段 读者
与评论者的对话:
读者来函:『我还忘了说,Prosise 的这本书完全没有讨论 OLE。虽然我了解这 是这本
一般性、介绍性书籍的抉择,我还是认为这和书名之间存在着一种矛盾。毕竟, Win95
程式设计一定会牵扯到某些 COM 和 OLE。实际情况的确如此,现在再也不可能和
shell 交谈而没有使用 COM 物件了,Uniform Data Transfer 似乎也已经成为实 作拖
放(drag and drop)和剪贴(copy and paste)功能的最佳途径了。所以,忽略 这个
主题实在令人有点惊讶。』
Burk 回答:『我同意你的大部份观点。程式设计书籍的名称没有恰如其份地反应 出书
籍内容是出了名的,所以我无法不同意你的观点。然而,我绝对不赞成这本书涵 盖
OLE。OLE 复杂到足够成为一本书。要在这一本已经过胖的书籍中加入一章 OLE ,可想
而知必然内容肤浅,就像其他为了满足市场因素而强加一章 OLE 的其他书籍一样 。那
样的书籍在我的架上有一大堆。与其加一章肤浅的 OLE,我宁愿作者多花时间让 其他章
节更有深度些。...我比任何人忍耐了更多的烂书,所以我宁愿看到涵盖主题不多 但是
内容十分扎实的书籍。』
「与其加一章肤浅的 OLE,我宁愿作者多花时间让其他章节更有深度些。」唔, 就连我
当初阅读 Carles Petzold 的世界名著Programming Windows 95 的最后一章(O LE)
时,也有相同的感受。如果 Prosise 来到台湾,发现他的大作被改了名称,加上 了在
他抉择之外的 ActiveX,让我们猜猜他脸上的表情。这本书的中译本在原著之外 增加了
第零章 ActiveX,我愿意相信是出版者的用心,而不是如 Ron Burk 所说「为了 满足市
场因素而强加一章肤浅的 OLE」。我不愿评论中文版新加的一章内容如何,毕竟 用心良
苦。但是把书名也给改了,挂上斗大的 ActiveX,这种行径曾经在 BBS 上引起读 者的
强烈抗议,他们说这是「挂羊头卖狗肉」。
Ron Burk 说「程式设计书籍的名称没有恰当反应出其内容,是出了名的」,嗯. ..嗯
...我也感受深刻。
■MFC Internals
作者:George Shepherd, Scot Wingo
出版公司:Addison Wesley
出版日期:1996 第二季
页数:15 章,709 页
售价:US$ 39.95
1. A Conceptual Overview of MFC
2. Basic Windows Support
3. Message Handling in MFC
4. The MFC Utility Classes
5. All Roads lead to CObject
6. MFC Dialog and Control Classes
7. MFC's Document/View Architecture
8. Advanced Document/Vieww Internals
9. MFC's Enhanced User-Interface Classes
10. MFC DLLs and Threads
11. How MFC Implements COM
12. Uniform Data Transfer and MFC
13. OLE Documents the MFC Way
14. MFC and Automation
15. OLE Controls
Appendix A: A Field Guide to the MFC Source Code
Appendix B: The MFC Internals Floppy
Addison Wesley 出版公司似乎最喜欢出一些未公开秘密、内部运作奥秘之类的书 籍。
这是继 Windows Internetls 和 DOS Internals 和Windows 95 Internals 之后 又一本
黑箱书。
本书挖尽 MFC 原始码,解释 MFC 的黑箱作业原理与动作流程。这书的诉求对象 已经不
是想以 MFC 撰写一般程式的人,而是 MFC 玩了相当一段时间,欲有所突破的人 。
应用技术欲有所突破,核心技术就得加强。很多人对于「了解 MFC 的黑箱作业」 心存
疑惑,总认为这违反物件导向的封装继承性以及application framework 的精神 。啊,
不是这么说!你买一本汽车百科,了解汽车的构造原理,并不妨碍你「希望在没 有任何
机械背景的情况下,学会驾驭这一堆铁」的心愿。然而,当你看过汽车的解剖图 ,知道
变速箱、离合器、万向传动轴、引擎燃料系统、动力传达装置、悬吊装置、煞车 装置
...,是否开起车来比较实实在在?了解构造原理之后,要来个甩尾大回旋,比较 知道
该怎么做吧,基本操作也比较不会出错(很多人煞车时顺带把离合器踏板给踩下 去,怕
熄火。这习惯养成之后,高速公路上就会要你的命)。
依我之见,了解 MFC 原始码是有必要的,尤其在导入部份 -- 这是影响一个人能 否学
成 MFC 的关键。一本好的 MFC 书籍应该让程式员完全了解每一个奇怪巨集(像 是
DECLARE_MESSAGE_MAP、BEGIN_MESSAGE_MAP、END_MESSAGE_MAP、DECLARE_SERIA L、
IMPLEMENT_SERIAL 等等等)的背后所代表的机制,以及每一个必须改写的虚拟函 式
(例如CWinApp::InitInstance、CDocument::Serial、CView::OnDraw 等等等) 背后所
代表的意义与动作。但是当程式的主轴精神完全掌握之后,旁支应用(例如对话 盒、控
制元件、列印、预视)就不需要再那么深入探究原始码了。当然,这是指一般性 质的
MFC 书籍而言,MFC Internals 本来就是要把 MFC 整个翻两翻的,所以它照挖不 误。
附带一提,本书附录A对于 MFC 原始码有相当完整的一份整理。当你探索 MFC 丛林,
进而发现自己和 MFC 的内脏大肠纠结不清时,附录A可以发挥指南针的功效。这 里面
介绍了 MFC 的常见写码风格,以及探索 MFC 所需的一些提示和工具,然后介绍 MFC
安装后的磁碟目录架构、表头档、inline 档(.INL 档)、资源档、原始档。另 外,书
附磁片中除了内含范例程式,还有一份 MFC FAQ(常见问答集),有 Word 和 H TML 两
种格式。
■Dissecting MFC (深入浅出 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 之间的关系。一个程式如果支援两份以上的Docume nts,
应该如何管理?对应的使用者介面应该如何设定?Document Template 究竟是何 用途?
这是这个主题要探讨的题目。
4. Runtime Type Information(RTTI)和 Dynamic Creation。把一份 documen t 写入
档案之中,连同类别名称和成员变数的值,没有问题。是的,一点问题也没有, 但是读
出来就有问题了,因为你不可能读一个类别名称到一个字串中然后对这个字串做 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 framewor k 中架
构起一个由所有类别相关资讯(包括类别名称及建构函式)组成的类别型录网络 (一个
串列),然后把类别名称的比对动作埋藏在 Serialize 虚拟函式中。类别型录网 络中
的每一个成员就是 CRuntimeClass 物件,网络的组成则是藉由类别宣告时的
DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE 巨集完成。RUNTIME_CLASS 巨集就 是取
出「类别型录网络」中的一个元素(代表一个类别)。所以,当你的程式一开始 执行,
整个 MFC 的绝大部份类别,都已经放在这个「类别型录网络」之中(噢,是的, 当然
也耗用了你的记忆体)。有了这网络,RTTI(执行时期型别辨识)和 Dynamic
Creation 都不是问题。
5. Persistence。文件内容要用什么型式写到档案去,才能够再从档案读出来恢 复为一
个个的物件?这就是 persistence(MFC 称之为 serialization)要探讨的题目 。本书
把 Serialize 虚拟函式的内部行为全部挖掘出来,并且实际观察一个文件档的 hex 倾
印内容。
这五个部份是本书最精华的地方,也是它独步全球的地方。要有这么深入的了解 ,非得
观察 MFC 原始码不可。本书把相关的 MFC 码整理出来,加上相当多的示意图, MFC
Internals 虽然挖得更广,整理的功夫却没有这本好。
这本书用词相当精准。用词精准在容易岐路的物件导向领域中至为重要,许多细 微的观
念就在字句推敲中成形。
实例方面,希望看到琳琅满目的范例程式的读者,将会大失所望。这本书使用Vi sual
C++ 的标准范例 Scribble。只有第 13 章「多重文件与多重显示」中才有作者自 己设
计的程式。然而以Scribble 为范例主轴,有一个意想不到的好处:常看 Micros oft
Systems Journal 或 Windows Developer's Journal 的朋友就知道,许多作家喜 欢在
示范新技术或新构想时,以 Scribble 为载具。如果你对Scribble 十分熟悉,阅 读那
些文章可就驾轻就熟了。
本书的许多精心插图,是令人惊喜的地方。一图解千言万语,在这里获得最佳注 脚。
我偷窥了一封读者写给本书作者的信,信上这么说:
『当我在书店中驻足察看这本书五分钟之后,我便知道这本书是一定要买下的。 我一鼓
作气将这本书给读完了,而且是彻彻底底地读了两遍。...我个人特别喜欢第三章 :MFC
六大关键技术之模拟。这章内容的设计的确是要在 MFC 丛林中,大刀阔斧地披露 出最
重要的筋络,我相信这正是所有学习 MFC 的人所需要的一种表明方式。对我而言 ,以
往遗留的许多疑惑,在此都一一得到了解答。最重要的是,您曾在说到,学习 M FC 的
过程中最重要的莫过于自我审视 MFC 程式码的能力。很高兴地,在我看完本书之 后,
我确实比以前更有能力来看 MFC 原始码了。总之,我为自己能够更深入了解 MF C 而要
向你说声谢谢。』
作者因为这封令人感动的信,当天又多熬夜三个小时。不要问我是怎么知道的 : -)。
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.109.0.101]
|
|