简介本书适用于已经具备了MFC编程的基础知识,而又渴望扩充自己的能力和知识的读者。书中提供了众多的方法和技术,用于处理文档-视图体系结构、打印和预览、树形控件和列表控件、控制栏和对话栏、图形图像处理和调色板操作、数据库访问对象(DAO)类,以及增强型元文件。丰富的Internet类是VisualC十十5.0的新特性,在本书最后一章中,我们将介绍这些新特性并学习如何编写文件传输协议(FTP,filetransferprotocol)浏览器。在所给范例中,有些使用了App和Class向导,有些未用。所有的例子程序都是非常实用的应用程序,而不是小代码段,它们展示了如何把整个应用程序组合在一起。此外,我们还将讨论有效地利用系统注册表(systemRegistry)的各种方法。让我们以打印和与之相关的预览操作为例来看一下MFC的作用。在商业应用程序中,打印报表通常是应用程序中最重要的功能。在很多这类应用程序中,用户界面和程序操作仅仅是为打印作准备。无论是基于文字、基于图形,还是二者的结合,只要报表对你的应用程序而言是重要的,本书都可以助你一臂之力。本书将通过6个重要的范例演示如何处理打印/预览操作,它们分别适用于从文字到图形的每一种不同的应用。本书主要讲述MFC的中级技巧,例如如何用CListCtrl和字体枚举来创建字体选择控件,如何使用CTreeCtrl和ABC字符宽度,以及单词的换行技术。书中还深入地讲述了映射模式,列举了很多文本和图形缩放的例子,也浏览了CPtrArray和CObjList容器类。前七章主要讲述各种文档-视图(Document-View)结构的实现,并演示了序列化的方法。图形操作包括用世界坐标系来缩放、裁剪以及滚动位图(bmp)文件。另外,还深入讨论了颜色调色板,内容包括Identitypalettes,如何转换为灰度图像或者如何完成颜色调整。也涉及了WYSI-WYG操作。第8章和第9章利用新的DAO类来更新和查询MicrosoftAccess数据库,生成了精美的报表,并为树形控件和列表控件提供数据。第10章专门讲述了控制栏、对话栏和工具箱。在一个DAO例子中甚至还有动态分配二维数组的操作。第12章对增强型元文件做了一个综合考察。最后一章演示了用新的Internet类写一个FTP浏览器的方法。各章中的提示讲述的是如何有效地使用系统注册表(SystemRegistry),代替原来的位于Windows文件夹中的旧风格ini文件。如果读者不是MFC的中级程序员,但对WIN32风格的编程非常熟悉,那么本书也是一个学习MFC类方法的很有价值的工具,因为书中经常回顾一些主要的函数和方法,这些函数和方法将会非常有用。在刚开始的几章中,作者总是给出基本的C语言风格函数和与之对应的MFC的类和方法,这是因为MFC编程者总要借助WIN32编码。当使用增强型元文件的时候,这种情况就非常明显了。不要因为学习的是一些小的例子程序就感到烦恼。所有的中级MFC应用程序都可以在Windows95和WindowsNT平台运行。如果你在Windows3.1平台作开发工作,那么绝大多数概念仍然适用,只是读者需要对代码作一些改动,二者最大的差异在内存模式和体系结构方面。虽然书中简要介绍了C语言风格打印机的Escape打印代码,但是在打印方面主要的重点工作仍然是由MFC类封装起来的代码完成。作者使用了所有的标准的Print,PrintSet-up,PrintPreview和PageSetup对话框,还分别讨论了文档-视图(Doc-View)结构的应用程序和非文档视图(nonDoc-View)结构的应用程序的打印。演示了用于打印文本和图形的各种技巧,包括很多用于打印时缩放bmp文件的方法。还涉及了利用从MicrosoftAccess数据库中获得数据,来生成可打印的报表的方法。读者将会从中学到创建、使用、缩放和打印增强型元文件的方法。对于文本来讲,字体的问题很突出,所以我们一开始就讨论字体的细节,包括ChooseFonts公共对话框和CListCtrl字体枚举控件,类似在商业字处理器中用到的那样。本书甚至也在一定程度上涵盖了对话框和自动数据传输。本书中还有6个以PrintingSituation#n作为开头的部分。为了便于快速参考。它们分别简洁地定义在程序例子中用到的打印过程的各个方面。对于编码风格,有两点要注意。作者讲授编程课程已有16年以上的历史了就像读者已经意识到的那样,Wind0ws编程涉及大量的标识符、关键值和API以及类的成员函数。名字空间的复杂程度除了编写操作系统外,超过了任何一个作者所见过的程序。那些必须的名字和标识符的数量之多,除了让读者不知所措外,没有其他的意义。实际上,我仍然记得在我第一次教Windows编程的学期中,花了很多的时间来试图解决哪些名字是必须精确编码的,哪些是可以任意控制的。本书的一个主要特点是,读者哪些名字是必须照原样输入的,比如MFC类的一部分,而哪些名字是可以任意控制的。所有用户定义的变量名称一般都是小写——如果是小写的话,那么应该可以由读者自己来命名。只有两个例外,一个是#define定义的名字,根据一般的编程约定,总是大写;另一个例外就是类成员函数名称,字母是大写的。另一个在示例中识别名字代码的办法是:如果名字使用的是匈牙利记法(Hungarian),那么它就是MFC的专用名字;如果不是,那就是程序员自己定义的名字。读者在自己的代码中可以用任何一种自己熟悉的命名约定,但是如果你参考本书的命名约定的话,可以免去或基本免去对名字的猜测之苦。当用ClassWizard生成代码时,类的成员的名字都用m开头,本书也采用了这种方法。作者对所有的代码都作了详细的归档处理。可以肯定地说,这些代码都是可读的,并且是可维护的。关于版权这里要说一句:书中的例子程序和代码,读者可以随意使用,不需要许可证。但是如果没有随意改变我的代码的话,能够对我说声谢谢可能会更好。当然,我对例子程序中的任何不好的影响都不负责——如果使用,就自己负责。我的mail地址是:Broquard@flink.com。请注意,本书是学习者的手册,不是专用的参考手册。因此,需要查询文档或者是“On—LineBooks”,因为那些编程人员会给你的产品提供参考或者更深入的细节。软件要求读者可以在WindoWs95或者是WindowsNT下,用MicrosoftVisualC十十5.0或者是更高的版本,编译运行所有的例子程序。在这里,编译链接用的是版本5.0。光盘中的发行版在建立的时候,用的是静态链接,这样就不需要再加载这个版本的MFCDLL。另外,也可以在版本4.2下编译所有的例子程序(除了最后一章中的Internet例子程序)。在发行版5.0中有哪些新的东西MFC5.0中新的项目包括Internet类,封装在WinInetWin32接口中。用这些新的类来访问网络是件非常容易的事情。同时也要注意,发行版本越小,执行的速度越快。全部的MFC都已经在速度上做了很大的优化。版本5.0也包括对ActiveX控件(OLE2和COM)的大量的新的支持,但是这已经超出了本书讨论的范围。配套光盘上的例子程序本书光盘上面有本书所有的例子程序的完整代码。由于篇幅的原因,本书中只节选了相关的部分。附录C中讲述了如何安装和使用光盘。所有的例子程序都包含可执行的版本和源文件以及工程文件。主要的子目录是IntermediateMFC。可执行程序的发行版在\Intermedi-ateMFC\Bin文件夹中,这样读者不需要在运行这些程序之前编译这些例子。但是,如果读者想在运行安装程序之前,就运行这些程序,还是请先阅读光盘上的readme文件,文件中将讲述如何正确的初始化系统注册表(SystemRegistry)。每一个例子程序都位于独立的文件夹中。文件夹的命名约定是PgmNNL,这里NN是章节号而L是字母,它用来区分一章中的多个程序。因此,名字为Pgm05b的文件夹包含的是第5章的第二个例子程序。\IntermediateMFC\Bmp文件夹中有一些bmp文件,这些文件在所有的程序中都会用到。一些可以查询的其他资源下面是一些关键的中级或者高级的MFC参考书。Blaszczak,M.《TheRevolutionaryGuidetoMFC4ProgrammingwithVisualC十十》,Chicago,IL:Wrox,1996。这本必备的书有大量的有用信息,特别是关于OLE的部分。ISBN1-874416-92-3Schmitt,D.《ExtendingtheMFCLibrary》,Reading,MA:AddisonWesley,1996。这本书为读者演示如何编写自己的MFC扩展类,甚至把它们变成DLL或者是OCX。ISBN0-201-48946-5Shepherd,G.和Wingo,S.《MFCInternals》,Reading,MA:AddisonWesley,1996。这本必备的书涵盖了MFC的内部设计,给读者一个更好的机会来继续阅读MFC源码本身。ISBN0-201-40721-3。Internet站点是免费的,并且也是不可缺少的。MicrosoftDeveloperNetworkOnLine:www.microsoft.com/msdn/default.htm.经过免费的登记过程之后,读者就可以浏览大量的MSDN资源了。