图书前言

目前,各高等学校已经把C/C++列为理工科专业学生的必修课程,这门课程使学生初步了解和掌握了面向对象程序设计的思想和方法,这无疑为学生学习和掌握MFC打下了良好的基础。如果在此基础上开设MFC课程,除了可以使学生掌握Windows应用程序设计的基本方法之外,又可以使学生更进一步深刻、全面地理解面向对象程序设计的思想,把握住计算机程序设计方法的发展方向,从而为今后进一步提高计算机程序设计能力打下坚实基础。

本书作为《MFC Windows应用程序设计(第2版)》一书的配套教材,除了提供了《MFC Windows应用程序设计(第2版)》教材中各章习题的解答外还设计了一些课后上机实验,学生通过这些必要的练习可以较快地了解MFC的框架并掌握使用MFC类库进行Windows应用程序设计的一般方法。

为使学生可以较快地熟悉Visual C++开发环境中的众多开发工具,书后还有选择地介绍了Visual C++部分开发工具的使用方法。

本书在编写中参考了大量的相关文献,并引用了其中的一些例题和内容,在此对这些文献的作者表示诚挚的谢意。

参加本书编写工作的有任哲、李益民、车进辉。由于作者水平有限,恳请读者对书中的缺点和错误提出批评和指正,欢迎读者与作者联系。

通信地址:北华大学计算机科学技术学院

邮编:132021

电子信箱:renzhe71@sina.com.cn

作 者2007年7月第2版

前言  由于广大读者的抬爱及清华大学出版社的鼓励,本书有幸再版。在此首先对广大读者和出版社表示衷心的感谢。自本书第1版出版以来,作者陆续收到一些读者来信,针对这些来信,作者准备谈以下两个问题。

1. 为什么要学习MFC

作者在第1版前言中就说过,通过对MFC的学习,除了可以使学生掌握一种Windows应用程序设计的基本方法之外,还可以使他们进一步全面、深刻地理解面向对象程序设计的思想,从而把握程序设计方法的发展方向。对此,曾经有读者提出过疑问: Visual Basic、Delphi、C#.NET、Java不都是面向对象的吗?为什么非要学习目前看起来似乎有些落后的MFC呢?

诚然,从时间上来看,MFC是微软较早开发的Windows应用程序框架,历史比较悠久。但是,请读者要注意,历史悠久与落后绝不是同一概念。当然也不意味着只要学会了MFC就可以打遍天下,解决所有问题,但就MFC所蕴含及所展露的程序设计思想、代码实现技巧,则是其他开发工具所不及的。

作为世界上第一个应用程序框架类库的MFC,是在C++尚未完善,尚不支持某些功能的时候产生的,MFC设计者们就是使用这种当时还比较低级的C++实现了这个庞大程序框架的各种复杂功能,因此MFC的各个角落都充满了这些设计者的智慧和技巧,这些智慧和技巧都体现了当今软件工程技术的重要思想和发展方向,以至于对C++的发展和随后出现的Java、C#技术等,都产生了极为深刻的影响,甚至有些就是MFC技术的直接应用。作者认为,迄今为止还没有一个应用程序框架类库能具有如此之大的信息量,所以它是计算机专业教育和教学的绝好素材。

作者认为, 通过对MFC的学习至少可以达到如下几个目的: 一是可以学习Windows应用程序的特点(图形界面、多任务、事件驱动)、数据和函数的组织方法(资源、动态链接库)和结构(接收、分派消息的主程序模块和处理消息的消息相应程序模块)及其处理思想;二是通过MFC这个大实例,可以学习面向对象程序设计的实际方法(例如文档/视图结构的构思);三是可以学习MFC设计者们的一些巧妙的程序设计方法和技巧(例如消息映射、对象动态创建、序列化);四是可以学习Visual C++这个开发环境的使用,真可谓是一举多得。所以,作为每一个立志从事计算机工作的人来讲,不在一定程序上了解和掌握MFC将会是他的终生遗憾。

 MFC Windows应用程序设计(第2版)第2版前言 当然,其他开发工具也有它们各自的特点和优势,也值得学习。例如,Visual Basic作为微软开发的第一套可视化开发环境,是它把DOS程序员从汪洋大海般的Windows API函数中解救出来,为Windows应用程序的设计和发展作出了不可磨灭的贡献。但是,它使用的并不是非学不可Basic这种非主流语言,所以对于学时极为有限和宝贵的学生来说,是否非得在校学习它就值得考虑。而使用PASCAL语言的Delphi和使用C/C++语言的C++Builder以其提供的丰富组件,在快速开发应用程序方面确实具有一定的优势,但它们与Visual Basic一样,把Windows底层封装得太严了,程序员只剩下填空的份儿,以至于使它们成了一种“傻瓜”式的开发工具,这当然不适合以教授和学习程序设计思想和设计方法为目的学校来使用。

当然,作者也认可业界 “聪明人用Delphi,高手用VC”之类的说法,因为在实际工程中,为了满足工程期限的需要,而采用Delphi之类的快速开发工具是合理并应该的。但并不意味着学生在学校学习期间一定要拿出大量的课时去学习这些快速开发工具(工具无所谓会不会的问题,而是熟不熟的问题),因为高等学校毕竟是教育机构而不是培训机构,不但要让学生知其然也更应该让其知其所以然,从而在此基础上形成较强的软件开发(甚至是研发)能力,而不是只让学生会几门流行的技术而使学生一辈子在技术发展背后疲于奔命。

那么学习Windows SDK编程又如何呢?作者认为,用函数编程这是C程序设计课程解决的问题,学生学习了C语言之后只要肯下功夫,多实践,自学Windows SDK程序设计是完全可以的,没有必要再浪费宝贵的课时了。

也正因为上述种种原因,所以本书既不以剖析MFC源代码为主,也不以介绍Visual C++开发工具的使用为主,而是以重点介绍MFC框架的设计思想、理念和方法为基础,兼顾应用,从而使读者通过对MFC的学习,除了掌握MFC之外,还能进一步深化理解C/C++、数据结构、操作系统乃至计算机硬件的相关知识,尽快提高程序设计能力并为学习其他应用程序设计工具打下良好的基础。

2. 第2版的变化

自本书的第1版出版以来,笔者陆续接到许多读者的来信,其中既有教师也有学生和程序设计人员,在信中都在对本书褒奖之余对书的内容及编写提出了很好的意见与建议,并希望作者在有机会的条件下进行修改。在此,作者首先对这些关心本书的读者表示由衷的谢意。

综合了读者的意见之后,《MFC Windows应用程序设计(第2版)》特做如下变化:

因为本书旨在说明MFC的思想,所以只要能以模拟方式说明其思想的,本书就采用了模拟方法。显然本书第1版在消息映射的模拟和叙述上过于潦草,给一部分读者学习这部分时造成了一些不必要的困难。故此,作者在第2版中进行了必要的修改,使得这部分的介绍更为合理、清楚。

文档/视图结构是MFC应用程序框架的核心。为此,作者在第2版的第3章中适当增加了文档/视图结构程序框架各对象的创建顺序、对象之间的联系、消息的传递等内容,以期使读者对文档/视图结构及其各对象之间的关系有更清楚的认识和了解,为读者精研MFC打下一个更加良好的基础。另外,在这一章中还加强了对象动态创建的介绍。

参考读者建议,作者把第9章的内容在顺序上做了改变: 先介绍相对比较容易的CFile类,后介绍CArchive类,最后介绍文档序列化,并且加强了序列化部分的说理性。

异常及异常处理是一个健壮的应用程序必备特性,这方面的内容的缺失不能不说是第1版的一个缺憾,这次在第2版中把它补齐了。

当然,为追求内容的完整性,本书至少还应该补上MFC在网络上的应用(这也是读者的建议),但作者思虑再三后认为,作为教材本书还是不包含这部分内容为好,一是因为MFC在网络程序方面并不占优势,二是因为各个学校都是在C#.NET或Java等课程中处理该问题,如果本书包括这部分内容的话,在教学上会造成内容的重叠。

另外,正如一些读者所指出的,第14章“组件对象模型COM基础”出现在本书中显得比较生硬: 第一,组件对象模型的内容对于本科生来讲似乎是难了一些;第二,这本书讲的是MFC,而这一章讲的是ATL,确实与本书不配套。关于第一点,作者认为不是问题,学生觉得难,一是因为没有好的教材,二是学生原来接触这方面的技术比较少,但不管是什么原因,在组件应用如此广泛的今天,计算机专业特别是以软件设计为培养目标的专业不向学生讲授这方面的知识是无论如何不行的,但是,现在大多数本科学校又没有相应的课程来介绍这方面的内容,再者组件技术把抽象类的应用发挥到了淋漓尽致的程度,不学它是不会深切领会抽象类的精神实质以及它的应用的,所以本书就勉为其难地编写了这部分的入门知识。为了降低学习这部分内容的台阶,作者重写了这一章。至于第二点,生硬就生硬了吧,因为ATL在组件设计方面确实要比MFC强许多。

正如前面所讲,MFC信息量巨大,涉及到程序设计的方方面面,因此需要读者在阅读本书时不但要不断地复习C/C++的内容,还要不时地阅读其他书籍,尤其是数据结构、操作系统等。

另外,还要多找一些实例上机做实验(提供这样例题的书籍及网上资料很多). 

本书在编写过程中参考了大量的相关文献和网上的资料,并引用了其中的一些例题、文字和插图,在此对这些文献和资料的作者表示诚挚的谢意。同时也对关心本书的读者表示万分的感谢。

参加本书编写工作的有任哲、房红征、李益民、车进辉。另外,刘泰辉博士对于本书的章节及内容的安排提出的良好意见和建议,也使本书增色不少。

将信息量如此巨大的MFC在一本50万字的教学用书中进行介绍,对水平有限的作者来说实在是一件难事,所以在此恳请读者对书中的缺点和错误提出批评和指正。同时,也希望阅读本书的读者或使用本书作为教材的教师能与作者共同探讨,以期对本书作进一步的改进。欢迎读者及时与作者沟通。

通信地址: 北华大学计算机科学技术学院

邮编: 132021

电子信箱: renzhe71@sina.com

祝各位教学有成!