2. 继承
首先,MFC 抽象出众多类的共同特性,设计出一些基类作为实现其他类的
基础。这些类中,最重要的类是 CObject 和 CCmdTarget。CObject 是
MFC 的根类,绝大多数 MFC 类是其派生的,包括
CCmdTarget。CObject 实现了一些重要的特性,包括动态类信息、动态
创建、对象序列化、对程序调试的支持,等等。所有从 CObject 派生的类
都将具备或者可以具备 CObject 所拥有的特性。CCmdTarget 通过封装一
些属性和方法,提供了消息处理的架构。MFC 中,任何可以处理消息的类
都从 CCmdTarget 派生。
针对每种不同的对象,MFC 都设计了一组类对这些对象进行封装,每一组
类都有一个基类,从基类派生出众多更具体的类。这些对象包括以下种类:
窗口对象,基类是 CWnd;应用程序对象,基类是 CwinThread;文档对
象,基类是 Cdocument,等等。
程序员将结合自己的实际,从适当的 MFC 类中派生出自己的类,实现特定
的功能,达到自己的编程目的。
3. 虚拟函数和动态约束
MFC 以“C++”为基础,自然支持虚拟函数和动态约束。但是作为一个编程
框架,有一个问题必须解决:如果仅仅通过虚拟函数来支持动态约束,必然
导致虚拟函数表过于臃肿,消耗内存,效率低下。例如,CWnd 封装
Windows 窗口对象时,每一条 Windows 消息对应一个成员函数,这些成
员函数为派生类所继承。如果这些函数都设计成虚拟函数,由于数量太多,
实现起来不现实。于是,MFC 建立了消息映射机制,以一种富有效率、便
于使用的手段解决消息处理函数的动态约束问题。
这样,通过虚拟函数和消息映射,MFC 类提供了丰富的编程接口。程序员
继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入 MFC 的编程
框架。MFC 编程框架将在适当的时候、适当的地方来调用程序的代码。本
书将充分的展示 MFC 调用虚拟函数和消息处理函数的内幕,让读者对 MFC
的编程接口有清晰的理解。
4. MFC 的宏观框架体系
如前所述,MFC 实现了对应用程序概念的封装,把类、类的继承、动态约
束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一
套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模
板。例如,SDI 应用程序的模板,MDI 应用程序的模板,规则 DLL 应用程
序的模板,扩展 DLL 应用程序的模板,OLE/ACTIVEX 应用程序的模板,等
等。
评论0
最新资源