從類CCmdTarget派生出絕大多數MFC中的類,其層次結構如下圖:

從根類Cobject層層派生出絕大多數MFC中的類,層次結構如下圖:

MFC中重點類:

CObject類是MFC的絕大部分類的基類。該類完成動態空間的分配與回收,支持一般的對象診斷、運行時類型標識,出錯信息處理和文檔序列化等。
(1)對象診斷:利用成員函數AssertValid進行對象有效性檢查;利用成員函數Dump輸出對象的數據成員的值,診斷信息以文本形式放入一個數據流中,用於調試器的輸出窗口信息顯示。(只能用於Debug版的應用程序)
(2)運行時類型識別:GetRuntimeClass根據對象的類返回一個相關聯的指向CRuntimeClass結構的指針,它包含了一個類的運行信息;函數IsKindOf用於測試對象與給定類的關系。
(3)通過與Carchive相結合,CObject類為其派生類提供了序列化功能。要創建一個支持序列化的派生類,必須將DECLARE_SERIAL宏添加到類定義中,將IMPLEMENT_SERIAL添加到類的實現文件中。
CCmdTarget:由CObject類直接派生,所有能實行消息映射MFC類的基類。將系統事件和窗口事件發送給響應這些事件的對象,完成消息發送、等待和派遣(調度)等工作,實現應用程序的對象之間協調運行,功能如下:
(1)消息發送:MFC應用程序為每個CCmdTarget派生類創建一個稱為消息映射表的靜態數據結構,可將消息映射到對象所對應的消息處理函數上。
(2)設置光標:程序正在進行某種操作:BeginWaitCursor()將光標改為沙漏形狀;操作完成:EndWaitCursor()將光標改回到之前的形狀;處於等待狀態時由於某些操作改變了光標形狀后,RestoreWaitCursor()用於將光標還原為等待狀態。
(3)支持自動化:CCmdTarget類支持程序通過COM接口進行交互操作,自動翻譯COM接口的方法。方法是調用EnableAutomation()、FromIDispatch()、GetIDispatch()、IsResultExpected()和 OnFinalRelease()。
CWinThread類:
由CCmdTarget派生,主要工作是創建和處理消息循環。
CWinApp: 從CWinThread類派生而來。CWinThread類用來完成對線程的控制,包括線程的創建,運行,終止和掛起等。成員函數InitApplication()、InitInstance()、Run()。
在MFC應用程序中有且僅有一個CWinApp派生類的對象,代表程序運行的主線程,代表應用程序本身。
CDocument: 文檔類,包含了應用程序在運行期間所用到的數據。從CCmdTarget派生,作為用戶文檔的基類,代表了用戶存儲或打開一個文件。主要功能是把對數據的處理從對用戶的界面處理中分離出來,同時提供一個與視圖類交互的接口。常用的成員函數有:
OnNewDocument():建立新文檔。
OnOpenDocument():打開一個文檔。
CWnd: 通用的窗口類,用來提供windows中所有的通用特性。由CCmdTarget類直接派生,是MFC中最基本的GUI對象。公共變量m_hWnd用於存放供API函數調用的窗口句柄。CWnd類和消息映射機制隱藏了窗口函數WndProc。一個Windows消息通過消息映射發送到相應的CWnd類OnMessage成員函數,可以重載。
CView: 用於讓用戶通過窗口來訪問文檔以及負責文檔內容的顯示。文檔視圖結構中的用戶操作區。
CFrameWnd: 從CWnd繼承來的,並實現了標准的框架應用程序。主要用來掌管一個窗口。其對象是一個框架窗口,包括邊界、標題欄、菜單、最大化按鈕、最小化按鈕和一個激活的視圖。
其常用成員函數:
GetActiveDocument():得到當前文檔的指針。
GetActiveView():得到當前視圖的指針。
SetActiveView():激活一個視圖。
GetTitle():得到框架窗口的標題。
SetTitle():設置框架窗口的標題。
SetMessageText():設置狀態欄文本。
CDialog: 用來控制對話框窗口。
CMDIFrameWnd和CMDIChildWnd: 分別用來多文檔應用程序的主框架窗口和文檔子窗口的顯示和管理。
CMiniFrameWnd:一種簡化的框架窗口,沒有最大化和最小化窗口按鈕,也沒有窗口系統菜單,很少用。
