MFC 四大天王
关於 MFC 这一主题,在「沧海书讯」版上曾经被讨论过的书籍有四本,正是我所列出的这四大天王。看来我心目中的好书颇能吻合市场的反应。
---------------------------------------------------------------
我还记得,无责任书评是在四年前(1993)开春时和大家第一次见面。虽然不是每个月都出货,但断断续续总保持着讯息。在明确宣布的情况下这个专栏曾经停过两次,第一次停了叁个月,於 1994 年开春复工;第二次停了十五个月,於 1997 年开春的今天,重新与各位说哈罗。
休息整整一个年头又叁个月,写作上的疲倦固然是因素之一,另外也是因为这个专栏直接间接引起的让人意兴阑珊的俗人俗务。读者写信来说,『总把无责任书评当成休闲散文看。或许您可以考虑写些休闲小品,定会畅销』,是呀,我正构思把因这个专栏而获得的人生经验写成一本「现形记」。可是不知道手上「正当」工作什麽时间才能告一段落,写起我的小说。也不知道什麽样的出版社有兴趣侯捷写的小说。
倦勤与无奈过去了,满腔读书心得沛然欲发。所以,我又拿起笔「无责任」了。感觉有点陌生,但是回顾读者们这一年写来的上百封信,让我意气昂扬。这个月我谈的是 Visual C++ 与 MFC。此题目我已提过两次。一来它十分重要,演化的过程也十分快速而明显,二来这个领域又有一些重量级书籍出现,所以我必须再谈一次。
另外,我还是得再强调,侯捷的专长领域有限,离我火力太远的书我只能远观不敢近玩。这个专栏用在抛砖引玉,让谈书成为一种风气。Windows Developer's Journal(WDJ)的 Books in Brief 专栏原先也是主持人 Ron Burk 唱独角戏,後来(现在)就有了许多读者的互动。我也希望这样的事情在这里发生。
●必也正名乎
常在 BBS 的程式设计相关版面上看到,许多人把 Visual C++ 和 C++混淆不清,另则是把 Visual C++ 和 MFC 混为一谈,实在有必要做个 清。C++ 是语言,Visual C++ 是产品。『我们学校开了一门 Visual C++ 的课程』这种说法就有点奇怪,实际意义是『我们学校开了一门 C++ 课程,以 Visual C++ 为软体开发环境』。『我会写 Visual C++ 程式』这种说法也很怪,因为Visual C++ 是 C/C++ 编译器,你可以在这套整合开发环境中使用 C 语言或 C++ 语言写出 DOS 程式或 Windows 程式;如果是 Windows 程式,还可以分为 Windows API programming 或MFC programming。所以「我会写 Visual C++ 程式」表达不出你真正的程度和意思。
Visual C++ 是一套 C/C++ 编译器产品,内含一套整合开发环境(Integrated Development Environment,IDE),也就是 AppWizard、ClassWizard、编译器、联结器、资源编辑器等工具的大集合。你知道,真正的 C++ 程式(而不是披着 C++ 外衣的C 程式)是以一个个类别(class)堆砌起来的,为了节省程式员的负担,几乎每一家编译器厂商都会提供一套现成的类别库(class libraries),让程式员站在这个基础开发应用软体。MFC 就是这样一套类别库。如果以物件导向的严格眼光来看,MFC 是比类别库更高一级的所谓 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 这类 framework 产品不断精进,Delphi、C++Builder这类快速程式开发工具(Rapid Application Development,RAD)不断进逼,SDK 程式设计的角色有点像组合语言了。不过我告诉你,学会它,绝对让你层次不同 -- 不只在程式设计的层次,还在对作业系统的了解层次。
---------------------------------------------------------------
这本书在程式设计的诱导方面,与 Inside Visual C++ 一书有极大的作法差异。本书没有任何一个程式以 Wizards 完成(我想作者必然曾经借重工具,只是最後再清理一遍),所以你不会看到像 //{{ 和 }}// 这样的奇怪符号,以及一堆 #ifdef、#undef、#endif。「程式码是我们自己一行一行写出来」的这种印象,可能对於消除初学者的焦灼有点帮助。
入选原因:文字简易,观念清楚。从章节目录上你看不到非常特殊的主题,但隐含在各个小节之中有不少珠玉之言。平实稳健。对 MFC 核心观念如 Document/View、Message Map 的讨论虽然浅尝即止,但表现不俗。
◎MFC Internals
这是四大天王之中唯一不以教导 MFC 程式设计为目的的书。它的目的是挖掘 MFC 的黑箱作业内容,从而让读者对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 Object 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 Windows并提,称之为 MFC/C++ 中的 Petzold 书籍(听起来犹如表界中的劳斯莱斯,车界中的劳力士)。Kruglinski 本人为了卡住这个尊崇的位置,甚至「於数年前的一个冬天,有着风雪的傍晚,冒险进入纽约的 East Village,拜访 Windows 大师 Charles Petzold,问他关於撰写 Programming Windows 的想法...」(语见本书之 Introduction 部份)。
Kruglinski 毫不隐藏他对 MFC 的热爱,他说这是他等了十年才盼到的软体开发环境。十年有点跨张,PC 的历史才多久?但 MFC 与 Visual C++ 整合环境之功能强大却是不假。这本书划分为四大篇。第一篇介绍 application framework 的观念以及 Visual 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、Uniform Data Transfer、Structured Storage、Embedded Servers and Containers。
第五篇谈的全部是资料库管理。一章谈 ODBC(Open Database Connectivity),另一章谈 DAO(Data Access Objects)。
网路上一位读者抱怨说,本书虽是名着,他却完全看不懂。呵啊,一切都在意料之内。作者一开始就顾着给我们完全正规的作法,用 AppWizard 产生程式码,用 ClassWizard改写虚拟函式、拦截讯息并撰写讯息处理常式。刚开始学习Windows 程式设计的人,甚至已经有 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、DocObjects 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 book is the Petzold for MFC programming"。这段话被当作本书的广告主打词。有趣的是,尽管万方争取,Petzold 本人倒是从来没有说过什麽话。也许他想说的是『我自己来写本 MFC 经典』,呵呵。
本书有没有接班人的能耐呢?有!和 Inside Visual C++ 比较,本书在低阶部份照顾得多些,程式细节则非常完备。别误会,我的意思并非说它是那种「把五句话可以说清楚的一段文字,以十句话来表达」的书籍(注),我是说它把各个技术主题挖得很深入,旁徵博引的功夫很好
本文地址:http://com.8s8s.com/it/it3853.htm