MFC类库2.5版(随Visual C++ 1.5发布)有以下特性: 开放数据库连接(ODBC)支持使你的程序可以访问和更新存贮在大多数常见数据库系统中的数据,比如Microsoft Access, Foxpro,和Microsoft SQL Server等 对OLE 2.01的支持,包括现场编辑,连接,拖放,和OLE自动化
Visual C++ 2.0版是该产品的第一个32位版本。它包括对Microsoft Windows NT 3.5的支持。 该产品涵盖了MFC 3.0,该版本的MFC有以下特征: 对标签对话框(即属性页)的支持(这也加到了Visual C++1.5中,在同一张CD-ROM中) 拖放控件栏已由MFC实现 对瘦框架窗口的支持 编程16位和32位OLE控件的单独的控件开发包,虽然还没有提供对OLE控件容器的支持
下一个发行版,涵有MFC 3.1的Visual C++ 2.1,添加了以下功能: 对新的Microsoft Windows 95(beta)的通用控件的支持 和Access Jet数据库引擎集成在一起的新的ODBC 2级驱动程序 提供TCP/IP 数据通信的Winsock类
Visual C++ 5.0包括了修正4.2版本错误的MFC 4.21。 Visual C++ 5.0本身也引入了一些很有价值的特征: 一个可以重设计的IDE,Developer Studio 97,它包括基于HTML的在线帮助系统和与其他语言,包括Java的集成 提供活动模板类库(ATL)供有效的开发Internet的ActiveX控件 通过为类型库引入新的关键字#import,提供C++语言对于组件对象模型(COM)客户程序的支持,详见第25章
最新版本的Visual C++ 6.0,包括MFC 6.0 (注意到现在两者的版本又同步了)许多MFC 6.0的新特性使得开发者可以支持全新的Microsoft Active平台,它包括: 含有作为Internet Explorer 4.0一部分引入的新的Windows通用控件的MFC类 支持动态HTML,允许应用程序动态操作和生成HTML标签 Active文档容器,该特性使得MFC程序可以包含Active文档 OLE DB的消费者和供应者模板支持和活动数据对象(ADO)数据绑定,它可帮助使用MFC和ATL的数据库开发者
内容介绍 (Introduction)
正像我的许多同事那样,我是从Charles Perzold的《Programming Windows》这本书开始学习Windows程序设计的。这本经典教程影响了一整代Windows程序员,被誉为“Windows程序设计圣经”。在1994年,当我开始学习MFC程序设计时,我试图去买一本讲解MFC且与《Programming Windows》同样高水平的书,可惜当时并没有这样的书。我只好花了一年时间用老式的办法学会了MFC,然后我决定自己写一本讲MFC的书。就是你现在拿在手里边的这本书,我多么希望在我当年学习MFC时能够有这样一本书。
可能你已经知道,MFC是Microsoft编写的一套搞Windows程序设计用的C++类库(C++ class library)。《Programming Windows with MFC》并不是一本讲C++的书,而是一本教你如何运用C++语言与Microsoft Foundation Classes (MFC)编写32位Windows应用程序的书。这本书的主要内容是教你运用MFC(而不是Windows API)去控制与操作Windows系统的基本特征与其提供的服务(accessing the operating system's essential features and services)。本书为以下两类人员编写:
§ 原来使用API而现在想学习MFC的Windows 程序员
§ 没有写过任何Windws程序的程序员
无论你是上述的哪一种读者,我假设你已了解C++语言且并能够正确理解C++的一些重要概念,如derived classes(派生类)与virtual functions(虚函数)。如果以上假设成立,那么你就准备好踏上MFC程序设计的征途吧。
即便是老练的Windows程序员当他们在第一次见到用MFC编写的代码时也常常会被搞胡涂,这是因为他们所看到的多半是由MFC代码生成向导(the MFC code-generating wizards)所生成的代码,而且还有无数行看不见的代码隐藏在MFC classes中,就像CFrameWnd, CDocument 和 CView。因此本书决定采取一种颇不寻常的方法来讲授MFC,那就是在最开始我们完全不必借助代码生成向导,而是手工编写MFC代码。当然,我们手工编写的MFC代码是采用最早的MFC 1.0版的程序架构,这样编写出的程序既不使用文档(document)也不使用视图(view)。当你掌握了一定的基础并对CWnd和CWinApp等一些基本的MFC classes有了一定的了解后,我引入向导(wizards)并教你如何发挥MFC文档-视图结构(MFC’s document/view architecture)的优势。接下来,你将从根本上理解Windows的消息导向本质(message-oriented nature of Windows)与Windows自身的关键构件(key components of Windows itself)如图形设备接口(Graphics Device Interface – GDI)。我相信你若是按照本书的步骤来学习MFC是会觉得轻松而愉快的。在认真学完本书后,你作为一个经验丰富的Windows程序员再回头看看自己的学习经历时,我想你会同意我刚说的那句话的。
《Programming Windows with MFC》分为四部分。第一部分将介绍MFC和Windows程序设计的核心原则,它从一个简单的”Hello, MFC”的程序开始,一步步地向你介绍菜单(menus)、控件(controls)、对话框(dialog boxes)以及其他组成应用程序的部件。第二部分在第一部分的基础上将进一步详细讲解MFC文档视图结构,特别地,第9、第10和第11章将揭示文档与视图背后的很多奥秘。这几章不仅说明了如何编写基本的文档-视图应用程序(document/view applications),而且讲解了如何在程序中实现像“分割了窗口的视图”(split-window views)与“打印预览”(print previews)等几种高级功能。
第二版新增的内容 (What's New in the Second Edition)
读过本书第一版的人会注意到本版(第二版)中的两个非常明显的改动。
第一个主要改动:本版新增了7个章节。一章专门讲解MFC view classes(MFC视图类),另一章包含MFC collection classes,还有一章介绍MFC文件读写操作与serialization(序列化)机制,另外四章讲解MFC与COM(The Component Object Model组件对象模型)的联系。MFC算不上是通用的COM应用程序架构(COM framework)【ATL (Active Template Library) 才是】,但用MFC编写某些种类的COM程序会异常简单。例如MFC极大地简化了编写ActiveX控件(ActiveX controls)的工作,而且MFC编写自动化服务器简直是小菜一碟。(自动化服务器 - Automation servers,利用COM组件在脚本客户端执行其功能的一种程序 - programs that use COM to expose their functionality to scripting clients)
第二个主要改动:本书这一版讲解并使用了wizards(向导),而本书第一版完全抛开MFC wizards。在书的前一至三章用手工编写代码,然后从第四章起便开始利用AppWizard(应用程序向导)与ClassWizard(类向导)来生成代码。为何作这一改动?我仍然坚信code-generating wizards(代码生成向导)是学习的障碍,wizards只适用于知识丰富的程序员;同时我也认识到在实际中,MFC程序员的确在使用wizards。某些任务(例如编写ActiveX controls(ActiveX控件))只有使用wizards才能完成。所以在经过深思后,我确信不讲解wizards将是作者的失职。
尽管本书这一版有关于wizards的新内容,无论如何,这不是(永远也不会是)一本仅仅教你如何在AppWizard中拿鼠标“点来点去”来做程序的书(a book about clicking buttons in AppWizard)。 在介绍完像“利用ClassWizard来写message handler(消息处理器)”这类基本的wizards用法后,我将拿wizards生成的源代码来做一番讲解并设想你能够领会到这些代码是如何产生的。请务必相信这一点:wizards并不能做任何你自己不能做的事,所以只要你愿意,手工键入所有源代码是完全切实可行的(perfectly feasible)。
在讲授MFC程序设计的书中,wizards的使用有下降趋势,因为wizards产生的代码不适合刊印。本书的第一版中每个源代码文件的内容都印在了书上。而这一版没有这么做,书中(对一个问题的讲解)一般只印出相关的那几行代码(而不是印出完整的源代码文件),而把完整的源代码文件放在本书附带的CD-ROM上。 因为印出全部源代码【译注:主要指wizards生成的“奇怪”的代码】会使书变厚却并不能增加书的内容。Visual C++ 6.0中的MFC AppWizards生成的某些代码甚至不会被编译(详见第四章) 。书中wizards生成的代码简直不忍卒读:代码被莫名其妙的空行搞得支离破碎、缺乏统一规格的注释和多余的函数。在我这个以能写出简练的、可读性强的示例代码(concise, readable sample code)为自豪的作者看来,wizards的表现实在让人难以接受。
然而,使用wizards是Windows程序设计中通行的做法,那是你、我和所有人都必须适应的。不过Visual C++开发组的人因该感到羞愧,因为他们至今没能给大家提供“真正实用的wizards”来用(实际提供的是他们称作“wizards”的几个“玩具”罢了)。因此在他们做出真正的wizards之前,我们还须设法应付我们遇到的情况。
CD光盘的内容 (What's On the CD)
本书附带的CD光盘包含书中出现的所有的例程的源代码与可执行文件。全部的例程在Visual C++ 6.0 与 MFC 6.0中编写并编译,并在多种Win32平台上做了测试。除非特别声明,所有的例程适用于Windows 98、Windows NT 4.0和Windows 2000。其中大部分例程同样适用于Windows 95与Windows NT 3.51。
你可以执行CD根目录下的Setup程序来把光盘上的内容复制到你的硬盘上,你也可以在CD的\Code目录里直接找到源程序文件。光盘的\Code目录中每一个子目录对应书中的一章,如Chap01、Chap02等等。那些子目录里就有例程,每套完整的源代码文件都附带一个release-build EXE文件(以发行版方式编译的可执行文件)和一个Visual C++ Workspace文件(*.DSW),*.DSW文件你可以在Visual C++中用“Open Workspace”命令打开。
From Me to You (and You to Me)
从1995年我开始写《Programming Windows with MFC》第一版的那一天起,我的目标一直是给C++程序员供应一个取之不竭的源泉,就像《Programming Windows》给C程序员提供的那样。我将请您来判断我是否达到了上诉目标。
我想知道您对本书的看法,如果您找到本书的错误,更请不吝赐教。你可以通过电子邮件 jeffpro@msn.com或访问我的个人网站 www.prosise.com 来与我取得联系。在我的网站上你可以找到关于本书的最新消息、勘误表以及我在其他项目工作的消息。在今年的晚些时候【译注:指1999年】,我打算在网站上发表关于MFC DLL的新的一章,到时候你可以在线阅读并评论。
在浩繁的计算机图书争相吸引读者注意力的今天,我知道你可能已经购买了其他MFC专著。我在此感谢您购买《Programming Windows with MFC》一书,并真诚地希望您认为您的钱花得值。祝您愉快!
Jeff Prosise
1999年3月12日
译注:以上提到的《Programming Windows with MFC》即是本书《用MFC编写Windows程序》