本书是经典的“Visual C++技术内幕”的最新版。Visual C++一方面是一个C++实现,它提供了一个功能强大的集成开发环境;另一方面,它提供了一些C++类库,其中最具影响力的当然是MFC。随着Visual C++的发展,MFC已经不是Visual C++中唯一的类库了,其他还有ATL、STL等。此外,Visual C++还融合了大量的开发工具,特别是与Internet相关的开发支持。最后,本书也介绍了Visual C++对.NET的支持。总体而言,本书涵盖了当前最新的Visual C++的主流技术,既有对老技术的继承和更新,也有对新技术的精辟阐述。所以,阅读本书可以全面拓宽读者的知识面。从这层意义上讲,本书相当于Visual C++的百科全书,它浓缩了Visual C++的精华。\r\n 本书面向中级Visual C++程序设计人员,并可以作为高年级计算机专业学生及软件学院学生的程序设计教程。 \r\n\r\n \r\n
第Ⅰ部分 Windows、Visual C++ .NET和应用 程序框架基础\r\n 第1章 Windows和Visual C++ .NET \r\n 第2章 Microsoft基本类库应用程序框架\r\n第Ⅱ部分 MFC基础\r\n 第3章 从MFC Application Wizard开始学习 \r\n 第4章 Visual C++ .NET向导 \r\n 第5章 Windows消息映射 \r\n 第6章 经典的GDI函数、字体和位图 \r\n 第7章 对话框 \r\n 第8章 通用控件 \r\n 第9章 使用ActiveX控件 \r\n 第10章 Win32核心内存管理 \r\n 第11章 Windows消息处理和多线程编程 \r\n第Ⅲ部分 MFC的文档-视图结构\r\n 第12章 菜单、键盘加速键、复文本编辑控件和属性表 \r\n 第13章 工具栏和状态栏 \r\n 第14章 可重用的框架窗口基类 \r\n 第15章 文档与视图的分离 \r\n 第16章 读和写文档 \r\n 第17章 打印和打印预览 \r\n 第18章 切分窗口和多视图 \r\n 第19章 上下文相关帮助 \r\n 第20章 动态链接库 \r\n 第21章 不带文档或视图类的MFC程序 \r\n第四部分 COM、自动化、ActiveX和OLE \r\n 第22章 组件对象模型 \r\n 第23章 自动化 \r\n 第24章 统一数据传输:剪贴板传输以及OLE拖放 \r\n 第25章 活动模板库介绍\r\n 第26章 ATL和ActiveX控件 \r\n 第27章 OLE DB模板\r\n第五部分 Internet程序设计 \r\n 第28章 Internet基础 \r\n 第29章 动态HTML简介 \r\n 第30章 ATL Server \r\n 第31章 Microsoft .NET \r\n 第32章 托管C++ \r\n 第33章 用托管C++进行Windows Forms编程 \r\n 第34章 用托管C++进行ASP.NET编程 \r\n 第35章 用托管C++进行ADO.NET编程 \r\n附录\r\n\r\n
终于可以松一口气了,翻译一本上千页的图书实在是一个不小的工程。想起五年之前我第一次翻译计算机图书(本书的第四版)的时候,期望借这本书将自己的编程知识总结和回顾一下。时隔五年之后再翻译第六版,算是将过去的编程经验又仔细地复习了一遍,在翻译过程中,有许多地方又唤起了当初摸索Visual C++和MFC时的那种感觉,因为那时摸索得来的经验与本书中的许多内容不谋而合,所以,每每碰到这种地方,总是感觉特别亲切,作为C++程序员的那种掌控一切的豪情油然而生,也真切地希望每一个Visual C++程序员都能够掌握这些技术,并享受这种因知识和技术而带来的人生体验和乐趣。当然,除了怀旧之外,本书中新增的内容又让我手心发痒,恨不得回到程序员的角色之中,利用这些新的技术(特别是.NET和Internet部分)做一个实实在在的项目。一本讲解技术的书能够将译者和读者的情绪带动起来,并且让他(们)产生亲近技术的欲望,这恐怕正是本书的魅力所在吧。
这几年来,关于Visual C++的书籍多如牛毛,但这本书一直占据着最重要的地位,我有幸翻译了本书的两个重要版本,所以借第六版中文版出版之际,谈谈我对本书的一些体会,算是译序吧。
一、本书与Visual C++的发展历程
了解本书历史的读者都知道,本书的开创者David Kruglinski在完成了第四版之后因为事故身亡,以后的版本是别人续写的。其中,第六版是由George Shepherd(MFC Internals的作者)续写的,以George对于MFC和Visual C++的理解深度,以及他的写作经验和教学经验,新版本只会增色而不会逊色。相信读者在读过这本书之后能够体会到这一点。
在我手上,除了英文第六版之外,还有本书的第二版(中文版)、第四版(中文版和英文版)。书很沉,很有分量,拿在手里沉甸甸的,当然更重的是内容。关于本书具体的内容请读者参看本书的目录或者引言部分。这里我想说明我对本书技术倾向的看法。
Visual C++开发环境包含哪些内容呢?这是被很多人误解的一个问题。有人把MFC和Visual C++等同起来,也有人把Visual C++和C++混淆起来,实际上,它们都有明确的分界线,在软件开发过程中,它们有各自的含义和用途。
Visual C++一方面是一个C++实现,它提供了一个功能强大的集成开发环境;另一方面,它提供了一些C++类库,其中最具影响力的当然是MFC。随着Visual C++的发展,MFC已经不是Visual C++中唯一的类库了,其他还有ATL、STL等。此外,Visual C++还融合了大量的开发工具,特别是与Internet相关的开发支持。本书几乎涵盖了所有这些内容,所以,阅读本书可以拓宽知识面。从这层意义上讲,本书相当于Visual C++的百科全书,它浓缩了Visual C++的精华。
Microsoft Visual C++的版本更新基本上反映了这10年来Windows平台上软件技术的发展历程。在Visual C++ 5.0版本之前,一切变化都在伴随着MFC的成熟与壮大,在此期间Visual C++主要用于开发桌面应用程序。到5.0版本之后,MFC已经不再是发展的重点,整体的发展呈多元化趋势,先是COM技术的普及,然后是Internet和Web开发技术的不断深入,最新版本中又引入了.NET框架的支持。
本书的发展历程也反映了Visual C++的技术路线。在本书第四版(对应于Visual C++ 5.0)出版的时候,桌面应用技术已经非常成熟,MFC结构完全定型,同时COM技术在Internet应用中大行其道,由此产生了一批Active技术,包括ActiveX控件、ASP、ADO、Active Document等。在第四版中我们可以看到关于这些技术的讲解。(第五版又引入了ATL相关的一些内容。)
现在呢,最大的变化,也是最激动人心的变化应该是.NET架构的引入,当然也随之带来了一大批新的技术。从长远的发展来看,.NET必将取代现有的大量应用技术,但不是所有,另一方面,新的技术和老的技术将会共存相当长的时间。
本书第六版基本上反映了现在的技术发展状况,MFC仍然存在,但是一些新兴的用户界面元素也被更新到MFC中。并且,本书也全面地讨论了COM和相关的开发支持,包括MFC和ATL对于COM的支持,这是目前仍然非常实用的两项技术。本书还讨论了针对Internet的程序设计技术,包括MFC对于Winsock和WinInet的支持,以及DHTML和ATL Server等。最后,本书也介绍了Visual C++对于.NET的支持,其中包括托管的C++以及如何用托管的C++来开发Windows Forms、ASP.NET和ADO.NET应用程序。本书所有这些内容涵盖了当前的主流技术,既有对老技术的继承和更新,又有对新技术的精辟阐述,所以,通过这本书你可以全面地学习到这些实用开发技术。
二、本书特色和新增内容
虽然这是一本再版的书,并且有差不多三分之二的内容与以前的版本(这里主要指第四版)相同,但是,它仍然有自己的特色以及新增的丰富内容。
本书的叙述风格基本上没有变化,仍然按照以前的模式,既有原理性的说明,也有指导性的介绍,还有很好的例子来帮助理解一些技术细节。并且,本书在讲解的时候也不啰嗦,与以前的版本相比,本书的内容增加了不少,但是篇幅基本上没有明显的增加。作者对于前面部分的传统内容有所精简,以便为后面的内容腾出空间。
本书新增的内容可以分几个方面来看:
1. 本书的前三部分内容主要针对桌面应用程序的开发,这既是MFC的传统优势,也是本书的传统优势。我们应该可以感受得到,这几年桌面应用技术还是有了一些变化的,特别是随着Windows 2000/XP的推出;尽管MFC的基本框架保持不变,但是在许多细微之处还是有了许多新增的界面元素,例如,除了SDI和MDI之外,Windows 2000又引入了一种新的界面风格:多顶级窗口界面(MTI)。而且Internet Explorer的新版本更是引入了许多新的UI元素,包括一些扩展的控件,以及Rebar等。Visual C++ .NET为这些新的特性提供了支持,本书也介绍了相应的编程技术。
2. 本书第四部分介绍了COM、自动化、ActiveX和OLE。COM是一项底层的组件技术,这部分介绍了COM的原理,以及MFC和ATL提供的最基本的支持。要想在不到300页的篇幅中全面地介绍所有这些技术是不可能的,但是本书这一部分中,不仅成功地叙述了这些基本知识,同时还介绍了几项关键应用技术,包括自动化、统一数据传输、用ATL来开发ActiveX控件,以及用OLE DB模板来开发OLE DB使用者和OLE DB提供者。
值得一提的是,除了传统的C++编程之外,Visual C++ .NET还引入了一种新的编程模式,被称为属性化的编程,用于支持COM组件的开发,它的基本思想是,允许C++类直接引用COM类和COM接口的一些属性,由编译器来解释这些属性并产生必要的代码,从而减轻了程序员在开发COM组件过程中一些不必要的负担。
3. Internet开发是一个不可错过的部分。本书第五部分在介绍MFC对Winsock和WinInet支持的基础上,又介绍了动态HTML和ATL Server。请读者不要将ATL Server与COM联系起来,实际上,ATL Server主要是针对IIS的一个开发工具,它被用来支持对于IIS服务器的扩展。
4. 最后一部分介绍Microsoft .NET程序设计。这是本书完全新增的内容,虽然.NET的标准语言应该是C#,但是Visual C++ .NET也提供了全面的支持,它是通过扩展标准C++而实现的,被称为托管的C++。被托管的代码将运行在.NET的公共语言运行时库之上,这是对组件技术的新发展,它使得应用程序运行在一个更加完善的管理环境之中,底层大量的设施可以被直接使用,并且软件的发布和协作将更加理想。对于开发人员呢,负担减轻了,他们可以更加关注于自己的应用,而无需为一些琐碎的细节操心。这一部分首先介绍了.NET中最为核心的公共语言运行时库,然后介绍了托管C++扩展,以及它的编程示例。最后用三章篇幅分别介绍了如何用托管C++来开发Windows Forms、ASP.NET和ADO.NET应用程序。
三、如何使用本书
面对一本涉及面如此广阔的计算机程序设计图书,我们该如何来使用呢?要想掌握书中每一项技术,不仅需要大量的时间,还需要扎实的基本功,但是,掌握这些技术对于把握现代软件设计环境又非常有帮助。
按照这本书的内容结构,读者当然可以有所取舍,但是最好的做法是,首先按顺序阅读一遍,如果有可能的话,对于其中一些关键例子最好配合在机器上进行实战练习。然后,对于感兴趣的话题可以仔细钻研,或者把这本书当作参考书,以后随时翻阅。
这本书讲解的深度属于中等程度,读者最好有一些C++和Windows应用开发方面的基础。对于书中讲述的每一项技术,本书也只是起到基本的引导作用,如果读者希望进一步深入钻研的话,需要阅读系统提供的源代码或者查阅MSDN Library中的详细讲解。但是,通过这本书,你可以快速地领会每一项技术。
因为这本书既有原理性的讲解,也有示例说明,甚至还有一步一步的实战过程。所以,本书也适合于被用作教材,可以针对研究生程序设计课程或者高年级本科生课程。我在本书刚刚出版之际,用本书作为北京大学软件学院研究生课程“程序开发环境分析与实践”的教材,取得了不错的效果。
曾经听人提到过,说这本书只是教会你怎么用向导工具来生成一个应用程序,离开了向导工具你还是什么也不会。这种观点并不正确,我说过这本书是原理和实战的结合,向导是提高开发效率的好帮手,但是如果你明白了原理,难道还会离不开向导吗?难道会看不懂代码吗?我很赞成使用Visual C++提供的向导,但是一定要知道这些向导帮你做了哪些事情,这很重要,否则当向导不工作的时候,你就失控了。
最后,我想说明一点,在翻译本书时,本书中的屏幕拷贝图以及Visual C++ .NET集成环境中的一些称谓(比如各种向导的叫法)我都保留了英文版本,而没有将它们转译过来。国内的大多数程序员都会使用中文版的Visual Studio .NET,Visual Studio .NET中文版几乎彻底地进行了汉化,所以,读者在阅读本书的时候也许会感到些微的不便。但是,本书在适当的地方作了相关的说明,相信这些中英文差异不会影响你的阅读和理解。
在本书的翻译过程中,我参照了第四版(中文版)的内容,发现了第四版中有不少错误,所幸的是,我这次还有机会把这些错误一一改正过来。同时也顺带着把原书中的一些错误也改正了。当然,翻译过程中必定会带来一些语言表达上的偏差,期望这些偏差不会影响您的阅读。
潘爱民
2003年2月14日
于北大燕园