5.5 本章小结与习题
本章主要介绍了MFC的类层次和MFC框架的关键技术,包括运行时的类型识别、动态创建、序列化、消息映射及命令路由,下面我们将对这些内容中的关键知识点进行回顾和巩固。
5.5.1 重点回顾
在MFC中大多数的类都派生于CObject,它的主要作用是为子类提供一些基本的功能,而这些派生类就构成了MFC应用程序的基本框架并实现了特定的功能。
CCmdTarget类是MFC的消息映射基础类,派生于CCmdTarget的类可用于处理当用户选择菜单或单击按钮等操作时所产生的Command消息。
CWinThread类是MFC中用于封装线程的类,每个MFC应用程序都至少应该使用一个从CWinThread派生的类,应用程序类CWinApp就是一个代表。
CWinApp类通常代表应用程序自己,它封装了应用程序的初始化、运行及终止的过程。基于框架的应用程序必须有且仅有一个派生于CWinApp的类的对象,并在完成窗口的创建工作之前执行对该对象的构造。
CDocument类是在使用文档/视图结构的应用程序中文档对象的基类,它为应用程序的文档对象提供了基本的功能,包括新建、串行化数据等。
CWnd类是所有MFC 窗口的基类,它封装了窗口的基本操作,包括窗口的创建、销毁、设置窗口风格等,以及窗口对大部分消息的默认响应。
CFrameWnd类往往用于创建应用程序的主窗口,并定义了大量管理视图和文档对象的成员函数及变量。
CView类是在使用文档/视图结构的应用程序中视图对象的基类,它是用户的主要操作界面。在应用程序中,一个视图对象通常只对应一个文档对象,但一个文档对象却可以关联多个视图对象,并且每个视图对象都以不同的形式来显示文档中的数据。
运行时类型识别使得应用程序能够使用基类的指针或引用来检查它们所指对象的实际派生类型,该项技术的实现需要得到CRuntimeClass结构、DECLARE_DYNAMIC()宏及IMPLEMENT_DYNAMIC()宏的支持。
动态创建指的是在运行的过程中以某个类为蓝本,通过调用CRuntimeClass对象的成员函数CreateObject()完成对象的动态创建工作,它需要CRuntimeClass对象、DECLARE_ DYNCREATE()宏和IMPLEMENT_DYNCREATE()宏的支持。
序列化需要得到CRuntimeClass对象、DECLARE_SERIAL()宏和IMPLEMENT_SERIAL()宏的支持才可实现。
支持序列化的类必然支持动态创建和运行时的类型识别。
消息映射的实现主要仰仗于类之间的消息映射网,而消息映射网的形成则要依赖BEGIN_MESSAGE_MAP()、ON_COMMAND()和END_MESSAGE_MAP() 3个宏。
MFC中的消息大致可分为3类,即命令消息(WM_COMMAND)、Windows消息(WM_***)及控件消息(WM_NOTIFY)。
在MFC中,处理一般Windows消息WM_***的路由方向是从派生类到基类的,而对于命令消息WM_COMMAND则有一套特定的路由机制。
5.5.2 课后练习
1. 在MFC框架中类的层次结构是怎样的?
2. 应当如何理解CObject类的作用?
3. RTTI、动态创建和序列化三者之间有什么联系?
4. 在MFC中,消息映射的实现机制是怎样的?
5. 在MFC中,处理命令消息的路由次序是怎样的?
6. 编辑代码模拟在MFC中的类层次。
【责任编辑:
云霞 TEL:(010)68476606】