1.CRuntimeClass结构
继承自CObject的类都有一个与它相关的CRuntimeClass结构,用来在运行时获得对象以及其基类的信息。
要使用CRuntimeClass结构,必需借助于RUNTIME_CLASS()宏和其他有关运行时类型识别的宏。
2.CObject
CObject类的作用:
a.对象诊断:MFC提供了两种对象的诊断机制,一种是利用成员含数AssertValid进行对象有效性检查,这样可以使类在继续运行以前对自已进行正确性检查。另一种是利用成员含数Dump输出对象的数据成员的值,诊断信息以文本形式放入一个数据流中,用于调试器的输出窗口信息显示。这两种诊断只能用于Debug版的 应用程序。
b.CObject类提供了GetRuntimeClass与IsKindOf两个成员含数来支持运行时类型识别。GetRunntimeClass根据对象的类返回一个CRuntimeClass结构的指针,它包含了一个类的运行信息,含数IsKindOf用于测试对象 与给定类的关系。
c.提供对象的序列化。必须在类的定义中包含DECLARE_SERIAL宏,并且在类的实现文件中加入包含IMPLEMENT_SERIAL宏.
3.CCmdTarget 该类直接从CObject类派生而来.
它负责将消息发送到能够响应这些消息的对象。它是所有能实行消息映射MFC类的基类,如 CWinThread,CWinApp,CWnd,CView,CDocument等类。CCmdTarget类的主要功能包括消息发送,设置光标和支持自动化.
a.消息发送:MFC应用程序为每个CCmdTarget派生类创建一个称为<消息映射表>的<静态数据结构>,该消息映射结构将消息映射到对象所对应的消息处理含数上。
b.设置光标:CCmdTarget类定义了3个成员含数用于设置光标,成员含数BeginWaitCursor()将光标改为沙漏形状,提示程序正在进行某种操作。当操作完成时,含数EndWaitCursor()用于将光标改回到 BeginWaitCursor()之前的形状。当处于等待状态时由于某些外部操作改变了光标形状后,含数 RestoreWaitCursor()用于将光标还原为等待状态。
c.支持自动化:CCmdTarget类支持程序通过COM接口进行交互操作,自动翻译COM接口的方法。它支持自动化的方法是调用EnableAutomation(),FromIDispatch(),GetIDispatch(),IsResultExpected()和 OnFinalRelease().
4.CWinThread
CWinThread类由CCmdTarget派生而来,它的主要工作是<创建和处理消息循环>。该类除了创建和处理消息循环还可以用来创建多线程。
5.CWinApp
CWinApp从CWinThread类派生而来.
CWinApp取代了WinMain主含数在SDK应用程序中的地位。传统SDK应用程序WinMain含数完成的工作由CWinApp的InitApplication(),InitInstance(),和Run()三个成员含数完成。在任何一个MFC应用程序中,此有且仅有一个CWinApp派生类对象,它代表了程序运行的<主线程>,也代表了应用程序本身。
在MFC中提供了4个含数来处理CWinApp对象,这些含数的返回值会使读者想起Windows的API编程。
AfxGetInstanceHandle()为程序提供了类似于HINSTANCE的处理。
AfxGetResourceHandle()的返回值也是HINSTANCE,它也可能被转化为HMODULE类型,以便在某些含数中使用
AfxGetAppName()会返回一个字符串指针,在调用API的CreateWindow()含数时,该字符串是作为szTitle参数 而使用的。
AfxGetApp()会返回一个指向应用程序类实例的指针,从而在程序的任何地方都可以访问到应用程序的公共成员
AfxGetMainWnd()返回CWnd指针
AfxGetThread()用于获得CWinThread对象指针
6.CWnd类
CWnd类由CCmdTarget类直接派生而来,CWnd类是MFC中最基本的GUI对象,也是功能最完善,成员含数最多的MFC类。
在CWnd类中,包含一个m_hWnd,该变量用于存放供API含数调用的窗口句柄。用CDialog类所创建的对话框和在Windows中常用的对话框都是CWnd的子孙,并且通用控件和在应用程序中所创建的视图(不论是否支持文档/视图结构)也都是CWnd的子孙
通常那些不在MFC中的API含数在CWnd成员含数中都能够找到。CWnd最大的不同是不需要程序员在调用中指定HWND,CWnd的成员含数将负责完成这项工作。
CWnd对象中包含指向窗口的句柄m_hWnd,因此可以像在一个非MFC操作中使用HWND一样用该参数调用API含数.
7.CFrameWnd类
CFrameWnd类直接由CWnd类派生而来。
CFrameWnd主要用来掌管一个窗口,可以认为它取代了SDK应用程序中窗口含数WndProc()的地位。CFrameWnd类的对象是一个框架窗口,包括边界,标题栏,菜单,最大化,最小化按钮和一个激活的视图。该对象会截取窗口消息并发送给子窗口和控件,它利用空闲时间使菜单命令和工句栏中的控件变亮或变灰(不可用)。
一个CFrameWnd对象当然也会<跟踪>一个文档的当前活动视图,并且注意变了焦点的窗口。事实上,不管是SDI还是MDI,用文档/视图结构所创建的应用程序都有一个继承CFrameWnd的对象.
CFrameWnd提供了若干个成员含数用于获得和设置活动文档,视图,图文框,标题栏等
GetActiveDocument() 得到当前活动文档的指针
GetActiveView() 得到当前活动视图的指针
SetActiveView() 激活一个视图
GetTitle() 得到框架窗口的标题
SetTitle() 设置框架窗口的标题
SetMessageText() 设置状态栏文本
8.CDocument和CView类
CDocument类从CCmdTarget派生而来,CView从CWnd派生而来。
CDocument类在应用程序中作为用户文档的基类,代表了用户存储或打开一个文件。它主要的功能是把对数据的处理从对用户的界面处理中分离出来,同时提供了一个与视图类交互的接口。
CDocument支持标准的文件操作,如创建,打开,和存储一个文档等。一个应用程序可以支持多种类型的文档,每种类型的文档都利用一个文档模板对象建立与各自视图的联系。其常用成员含数如下
OnNewDocument:建立新文档
OnOpenDocument:打开一个文档
OnCloseDocument:关闭文档
OnSaveDocument:保存文档
UpdateAllView():通知所有视图文档被修改
SaveModified():设置文档修改标志
CView类是MFC视图类和用户视图类的基类。文档为视图提供了数据,当一个文档中的数据改变时,将通过调用视图的成员含数OnUpdate()更新视图。也可以通过CWnd::Invalidate()或CWnd::InvalidateRect()刷新视图。MFC视图类及其作用如下。
MFC视图类 描述
CView 通常的视图类,可以用作图像编辑或者可以和一个控件相连。它是MFC中所有视图类的基类。
CCtrlView 另一个常用的视图类,可以用作从一个虚拟控件创建一个视图。它派生于CView
CEditView 往视图中加入一个CEdit控件,并提供了基本的文本编辑支持,具有打印支持功能
CRichEditView 在视图中封装一个RichEdit控件,该视图可以用作显示不同色彩,字体,大小的文本,同时也可以显示图像对象。需要复合文本(OLE)支持
CListView 在窗口中提供一列表控件功能,列表控件本身也可以提供几个视图,比如报表,列表,大图标 ,小图标。在window资源管理器中,该视图用在窗口右侧
CPreviewView 非文档视图,可作为打印预览。和非文档设备上下文CPreviewDC协同工作。CPreviewDC包含两个设备上下文:一个是打印机的,一个是屏幕的
CTreeView 在视图中封装了一个树型控件。在Windows资源管理器中,该视图用在窗口的左侧
CScrollView 直接派生于CView的常用视图,它通过控件视图和映射模式控制窗口显示,并响应滚动条的消息而自动滚动
CFormView 结合了一个对话框模板,并可以在视图中放置控件。它派生于CscrollView,并支持与视图/映射控件相同的特征。
CHtmlView 这是视图控件中的WWW浏览器。该视图提供了一个可供用户在其中浏览Web和本地机器上目录的窗口,它支持超链接和导航功能,并保持历史记录。