友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

深入浅出MFC第2版(PDF格式)-第45部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!





                                            1449                                291 

Win32                 1993。08                   (持续增加当中)             (持续增加当中) 



                                    A PI Jun gle 



                                                                                          323 


…………………………………………………………Page 386……………………………………………………………

                第篇    湷觥 FC  程式設計 



                                                       (  ) 

           Microsoft Foundation Classes                  MFC 



                PC 世界里出了三套C++ Application Frameworks ,并且有愈多愈多的趋势。这三套是 



                Microsoft  的MFC  (Microsoft Foundation Classes  ) , Borland  的OWL  (Object 



                WindowLibrary ),以及IBM VisualAge C++  的Open Class Library 。至于其它C++ 编译 



                器厂商如Wat 、Symantec、Metaware ,只是供应整合开发环境(Integraded Development 



                Environment ,IDE),其Application Framework 都是采用微软公司的MFC 。 



                Delphi (Pascal 语言),依我之见,也称得上是一套Application Framework 。Java 语言 



                本身内建一套标准类别库,依我之见,也够得上资格被称为Application Framework 。 



                Delphi 和Visual Basic ,又被称为是一种应用程序快速开发工具(RAD ,Rapid Application 



                Development )。它们采用PME  (Properties…Method…Event )架构,写程序的过程像是在 



                一张画布上拼凑一个个现成的组件(ponents ):设定它们的属性(properties )、指 



                定它们应该「有所感」的外来刺激(events ),并决定它们面对此刺激时在预设行为之外 



                的行为(methods )。所有动作都以拖拉、设定数值的方式完成,非常简单。只有在设定 



                组件与组件之间的互动关系时才牵涉到程序代码的写作(这一小段码也因此成为顺利成功 



                的关键)。 



                Borland 公司于1997 年三月推出的C++ Builder 也属于PME 架构,提供一套Visual 



                ponent Library (VCL ),内有许许多多的组件。因此C++ Builder 也算得上是一套 



                RAD (应用程序快速开发工具)。 



                早初,开发Windows 应用程序必须使用微软的SDK          (Software Development Kit ),直 



                接调用Windows API  函数,向Windows 操作系统提出各种要求,例如配置内存、开 



                启窗口、输出图形。。。。 



                所谓API (Application Programming Interface ),就是开放给应用程序调用的系统功能。 



324 


…………………………………………………………Page 387……………………………………………………………

                                        第5章    總觀Application Framework  



数以千计的Windows APIs ,每个看起来都好象比重相若(至少你从手册上看不出来孰轻 



孰重)。有些APIs 彼此虽有群组关系,却没有相近或组织化的函数名称。星罗棋布, 



雾列星驰;又似雪球一般愈滚愈多,愈滚愈大。撰写Windows 应用程序需要大量的耐 



力与毅力,以及大量的小心谨慎! 



MFC 帮助我们把这些浩繁的APIs ,利用对象导向的原理,逻辑地组织起来,使它们具 



备抽象化、封装化、继承性、多态性、模块化的性质。 



1989 年微软公司成立Application Framework 技术团队,名为AFX 小组,用以开发C++ 



对象导向工具给Windows 应用程序开发人员使用。AFX  的〃X〃 其实没有什么意义, 



只是为了凑成一个响亮好念的名字。 



这个小组最初的「宪章」,根据记载,是要〃utilize the latest in object oriented technology to 



provide tools and libraries for developers writing the most advanced GUI applications on the 



market〃,其中并未画地自限与Windows 操作系统有关。果然,其第一个原型产品,有 



自己的窗口系统、自己的绘图系统、自己的对象数据库、乃至于自己的内存管理系统。 



当小组成员以此产品开发应用程序,他们发现实在是太复杂,又悖离公司的主流系统…



Windows …太遥远。于是他们修改宪章变成〃deliver the power of object…oriented solutions 



to programmers to enable them to build world…class Windows based applications in C++。〃 这差 



不多正是Windows 3。0 异军崛起的时候。 



C++ 是一个复杂的语言,AFX 小组预期MFC  的使用者不可能人人皆为C++ 专家,所 



以他们并没有采用所有的C++ 高阶性质(例如多重继承)。许多「麻烦」但「几乎一 



成不变」的Windows 程序动作都被隐藏在MFC 类别之中, 例如WinMain 、 



RegisterClass 、Window Procedure 等等等。 



 虽说这些被隐藏的Windows 程序动作几乎是一成不变的,但它们透露了Windows 程序 



 的原型奥秘,这也是为什么我要在本书之中锲而不舍地挖出它们的原因。 



                                                                     325 


…………………………………………………………Page 388……………………………………………………………

             第篇    湷觥 FC  程式設計 



              为了让MFC 尽可能地小,尽可能地快,AFX 小组不得不舍弃高度的抽象(导至过多的 



              虚拟函数),而引进他们自己发明的机制,尝试在对象导向领域中解决Windows 消息 



              的处理问题。这也就是本书第9章深入探讨的Message Mapping 和Message routing 机 



              制。注意,他们并没有改变C++ 语言本身,也没有扩大语言的功能。他们只是设计了 



              一些令人拍案叫绝的宏,而这些宏背后隐藏着巨大的机制。 



              了解这些宏(以及它们背后所代表的机制)的意义,以及隐藏在MFC 类别之中的那 



              些足以曝露原型机密的「麻烦事儿」,正是我认为掌握MFC 这套Application Framework 



              的重要手段。 



              就如同前面那些形而上的定义,MFC 是一组凝聚性强、组织性强的类别库。如果你要利 



              用MFC 发展你的应用程序,必须同时引用数个必要类别,互相搭配奥援。图5…3 是一 



              个标准的MFC 程序外貌。隐藏在精致画面背后更重要的是,就如我在前面说过,对象 



              与对象之间的关系已经存在,消息的流动程序也都已设定。当你要为这个程序设计真正 



              的应用功能,不必在意诸如「我如何得知使用者按左键?左键按下后我如何激活某一个 



              函数?参数如何传递过去。。。」等琐事,只要专注在左键之后真正要做的功能动作就好。 



                               窗口标题 



           菜单及工具栏中已提供标准之基础功能 

                                                                 菜单(menu) 

           ,如文件对话框、打印机设定、打印预                                     工具栏(toolbar) 



           视窗口、LRU (最近使用过的)文件清 



           单、MDI 窗口菜单、About 对话框;并 

                                                                 MDI 风格 

           提供了一些半成品,如剪贴簿功能、求 



           助(Help)系统。 



                    状态列(statusbar)                              键盘状态指示窗 

                                                                (indicator pane) 



                                          图5…3 标准MFC 程序的风貌。 



326 


…………………………………………………………Page 389……………………………………………………………

                                             第5章    總觀Application Framework  



白头宫女话天宝:Visual C++ 与 MFC 



     微软公司于1992/04 推出C/C++ 7。0 产品时初次向世人介绍了MFC 1。0 ,这个初试啼声 



     的产品包含了20;000 行C++ 源代码,60 个以上的Windows 相关类别,以及其它的 



     一般类别如时间、数据处理、文件、内存、诊断、字符串等等等。它所提供的,其实是 



     一个〃thin and efficient C++ transformation of the Windows API〃。其32 位版亦在 



     1992/07 随着Win32 SDK 推出。 



     MFC 1。0 获得的回响带给AFX 小组不少鼓舞。他们的下一个目标放在: 



        ■  更高阶的架构支持 



        ■ 罐装组件(尤其在使用者接口上) 



     前者成就了Document/View 架构,后者成就了工具栏、状态列、打印、预览等极受欢迎 



     的UI 性质。当然,他们并没有忘记兼容性与移植性。虽然AFX 小组并未承诺MFC 可以 



     跨不同操作系统如UNIX XWindow 、OS/2 PM 、Mac System 7 ,但在其本家(Windows 产 



     品线)身上,在16 位Windows 3。x 和32 位Windows 95 与Windows NT 之间的 



     移植性是无庸置疑的。虽然其16 位产品和32 位产品是分别包装销售,你的原始 



     码通常只需重新编译联结即可。 



     Visual C++ 1。0 (也就是C/C++ 8。0 )搭配MFC 2。0 于1993/03 推出,这是针对Windows 



     3。x 的16 位产品。接下来又在1993/08 推出在Windows NT 上的Visual C++ 1。1 for 



     Windows NT ,搭配的是MFC 2。1 。这两个版本有着相同的基本性质。MFC 2。0  内含近 



     60;000 行C++ 程序代码,分散在100 个以上的类别中。Visual C++ 整合环境的数个重要 



     工具(大家熟知的Wizards )本身即以MFC 2。0 设计完成,它们的出现对于软件生产效 



     率的提升有极大贡献。 



     微软在1993/12 又推出了16 位的Visual C++ 1。5 ,搭配MFC 2。5 。这个版本最大的进步 



     是多了OLE2 和ODBC 两组类别。整合环境也为了支持这两组类别而做了些微改变。 



                                                                         327 


…………………………………………………………Page 390……………………………………………………………

                 第篇    湷觥 FC  程式設計 



                  1994/09,微软推出Visual C++ 2。0 ,搭配MFC 3。0 ,这个32 位版本主要的特征在于 



                  配合目标操作系统(Windows NT 和Windows 95 ),支持多执行线程。所有类别都是 



                  thread…safe 。UI 对象方面,加入了属性表(Property Sheet )、miniframe 窗口、可随处停 



                  驻的工具栏。MFC collections 类别改良为template…based 。联结器有重大突破,原使用的 



                  Segmented Executable Linker 改为Incremental Linker,这种联结器在对OBJ 档做联结 



                  时,并不每次从头到尾重新来过,而只是把新资料往后加,旧资料加记作废。想当然耳, 



                  EXE 档会累积许多不用的垃圾,那没关系; 透过Win32 memory…mapped file; 操作系统 



                   (Windows NT 及Windows 95 )只把欲使用的部份加载,丝毫不影响执行速度。必要时 



                  程序员也可选用传统方式联结,这些垃圾自然就不见了。对我们这些终日受制于editbuild



                  run…debug 轮回的程序员; Incremental Linker 可真是个好礼物。 



                  1995/01,微软又加上了MAPI      (Messaging API )和WinSock 支持,推出MFC 3。1  (32 位 



                  元版),并供应13 个通用控制组件,也就是Windows 95 所提供的tree 、tooltip 、spin、 



                  slider、progress 、RTF edit 等等控制组件。 



                  1995/07,MFC 有了3。2 版,那是不值一提的小改版。 



                  然后就是1995/09 的32 位MFC 4。0 。这个版本纳入了DAO 数据库类别、多执行线程 



                  同步控制类别,并允许制作OCX containers 。搭配推出的Visual C++ 4。0 编译器,也终 



                  于支持了template、RTTI 等C++ 语言特性。IDE 整合环境有重大的改头换面行动,Class 



                  View 、Resource View 、File View 都使得项目的管理更直觉更轻松,Wizardbar 则活脱脱 



                  是一个简化的ClassWizard 。此外,多了一个极好用的ponents Gallery ,并允许程序 



                  员订制AppWizard 。 



                  1996 年上半年又推出了MFC 4。1 ,最大的焦点在ISAPI          (Internet Server API )的支持, 



                  提供五个新类别, 分别是CHttpServer 、CHttpFilter 、CHttpServerContext 、 



                  CHttpFilterContext、CHtmlStream,用以建立交互式Web 应用程序。整合环境方面也对 



                  应地提供了一个ISAPI Extension Wizard 。在附加价值上,Visual C++ 4。1 提供了Game 



                  SDK,帮助开发Windows 95 上的高效率游戏软件。Visual C++ 4。1 还提供不少个由协力 



328 


…………………………………………………………Page 391……………………………………………………………

                                           第5章    總觀Application Framework  



    公司完成的OLE 控制组件(OCXs ),这些OLE 控制组件技术很快就要全面由桌上跃 



    到网上,称为ActiveX 控制组件。不过,遗憾的是,Visual C++ 4。1  的编译器有些臭虫, 



    不能够制作VxD    (虚拟装置驱动程序)。 



    1996 年下半年推出的MFC 4。2 ,提供对ActiveX 更多的技术支持,并整合Standard C++ 



    Library 。它封包一组新的Win32 Internet 类别(统称为WinInet ),使Internet 上的程 



    式开发更容易。它提供22 个新类别和40 个以上的新成员函数。它也提供一些控制元 



    件,可以绑定(binding)近端和远程的资料源(data sources )。整合环境方面,Visual C++ 



    4。2 提供新的Wizard 给ActiveX 程序开发使用,改善了影像编辑器,使它能够处理在 



    Web 服务器上的两个标准图档格式:GIF 和JPEG 。 



    1997 年五月推出的Visual C++ 5。0 ,主要诉求在编译器的速度改善,并将Visual C++ 合 



    并到微软整个Visual Tools  的终极管理软件Visual Studio 97 之中。所有的微软虚拟开 



    发工具,包括Visual C++ 、Visual Basic 、Visual J++ 、Visual InterDev 、Visual FoxPro 、都 



    在Visual Studio 97  的整合之下有更密切的彼此奥援。至于程序设计方面,MFC 本身没 



    有什么变化(4。21 版),但附了一个ATL        (Active Template Library )2。1 版,使ActiveX 



    控制组件的开发更轻松些。 



    我想你会发现,微软正不断地为「为什么要使用MFC 」加上各式各样的强烈理由,并强 



    烈导引它成为Windows 程序设计的C++ 标准接口。你会看到愈来愈多的MFC/C++ 程 



    式码。对于绝大多数的技术人员而言,Application Framework  的抉择之道无它,「MFC 



    是微软公司钦定产品」,这个理由就很呛人了。 



纵览 MFC 



    MFC 非常巨大(其它application framework 也不差),在下一章正式使用它之前,让我 



    们先做个浏览。 



    请同时参考书后所附之MFC 架构图 



                                                                       329 


…………………………………………………………Page 392……………………………………………………………

               第篇    湷觥 FC  程式設計 



               MFC 类别主要可分为下列数大群组: 



                  ■ General Purpose classes 提供字符串类别、数据处理类别(如数组与串行),异 



                     常情况处理类别、文件类别。。。等等。 



                  ■ Windows API classes 用来封包Windows API ,例如窗口类别、对话框类别、 



                     DC 类别。。。等等。 



                  ■ Application framework classes 组成应用程序骨干者, 即此组类别, 包括 



                      Document/View 、消息邦浦、消息映射、消息绕行、动态生成、文件读写等等。 



                  ■ high level abstractions 包括工具栏、状态列、分裂窗口、卷动窗口等等。 



                   ■  operation system extensions 包括OLE、ODBC 、DAO 、MAPI 、WinSock、ISAPI 



                    等等。 



           General Purpose classes 



                也许你使用MFC  的第一个目标是为了写Windows 程序,但并不是整个MFC 都只为 



                此目的而活。下面这些类别适用于Windows ,也适用于DOS。 



            CObject 



                绝大部份类别库,往往以一个或两个类别,做为其它绝大部份类别的基础。MFC 亦复如 



                此。CObject 是万类之首,凡类别衍生自CObject 者,得以继承数个对象导向重要性质, 



                包括RTTI (执行时期型别鉴识)、Persistence    (对象保存)、Dynamic Creation (动态生 



                成)、Diagnostic (错误诊断)。本书第3章对于这些技术已有了一份DOS 环境下的模 



                拟,第8章另有MFC 相关源代码的探讨。其中,「对象保存」又牵扯到CArchive,「诊 



                断」又牵扯到CDumpContext,「执行时期型别鉴识」以及「动态生成」又牵扯到 



                CRuntimeClass。 



           数据处理类别 (collection classes) 



                所谓collection,意指用来管理一「群」对象或标准类型的资料。这些类别像是Array 或 



330 


…………………………………………………………Page 393……………………………………………………………

                                             
返回目录 上一页 下一页 回到顶部 9 10
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!