小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

MFC類的組織結(jié)構(gòu)及主要的類簡介

 guitarhua 2011-08-31
第8.2節(jié) MFC類的組織結(jié)構(gòu)及主要的類簡介
8.2.1 MFC類的組織結(jié)構(gòu)
    目前的MFC版本中包含了100多個類,不同的類實現(xiàn)不同的功能,類之間既有區(qū)別又有聯(lián)系。MFC同時還是一個應用程序框架,它幫助定義應用程序的結(jié)構(gòu)以及為應用程序處理許多雜務,事實上,MFC封裝了一個程序操作的每一個方面。在MFC程序中,程序員很少需要直接調(diào)用Windows API函數(shù),而是通過定義MFC類的對象并通過調(diào)用對象成員函數(shù)來實現(xiàn)相應的功能。
    MFC類庫中類是以層次結(jié)構(gòu)的方式組織起來的,幾乎每個子層次結(jié)構(gòu)都于一具體的Windows實體相對應,一些主要的接口類管理了難以掌握的Windows接口。這些接口包括:窗口類、GDI類、對象連接和嵌入類(OLE)、文件類、對象I/O類、異常處理類、集合類等。
    MFC庫中的類之間按層次關(guān)系劃分可分為如下若干類:
    (1) 根類:Cobject
    (2) 應用程序體系結(jié)構(gòu)類
        應用程序和線程支持類
        命令相關(guān)類
        文檔類
        視類(體系結(jié)構(gòu))
        框架窗口(體系結(jié)構(gòu))
        文檔模板類
    (3) 窗口、對話框和控件類
        框架窗口類(窗口)
        視類(窗口)
        對話框類
        控件類
        控件條類
    (4) 繪圖和打印類
        輸出(設備相關(guān)類)
            繪圖工具類
    (5) 簡單數(shù)據(jù)類型類
    (6) 數(shù)組、列表和映射類
         數(shù)組類
         列表類
         映射類
    (7) 文件和數(shù)據(jù)庫類
         文件I/O類
         DAO類
         ODBC類
    (8) Internet和網(wǎng)絡工作類
         ISAPI類
         Windows Socket類
         Win32 Internet類
    (9) OLE類
         OLE容器類
         OLE服務器類
         OLE拖放和數(shù)據(jù)傳輸類
         OLE普通對話框類      
         OLE控件類
         OLE動畫類
         活動文檔類
         其他文檔類
    (10) 調(diào)試和異常類 
         調(diào)試支持類
         異常類
   下面簡單介紹一下MFC中一些主要的類和某些子層次結(jié)構(gòu)。

8.2.2 根類
    Cobject類是MFC的抽象基類,是MFC中多數(shù)類和用戶自定義子類的根類,它為程序員提供了許多編程所需的公共操作。這些操作包括:對象的建立和刪除、竄行化支持、對象診斷輸出、運行使信息以及合類的兼容等。
    竄行化是對象本身往返于存儲介質(zhì)過程。竄行化的結(jié)果是使數(shù)據(jù)“固定”在介質(zhì)上。Cobject類定義兩個在竄行化操作中起重要作用的成員函數(shù):Serialize和IsSeializable。程序可以調(diào)用一個由Cobject派生的對象的IsSeializable函數(shù)來確定該對象是否支持竄行化操作。建立一個支持竄行化的類的步驟之一是重載繼承自Cobject類的Serialize函數(shù),并提供竄行化數(shù)據(jù)成員的派生的專用代碼。
    Cobject的派生類同時還支持運行時類型信息。運行時類型信息機制允許程序檢索對象的類名及其他信息。Cobject提供兩個成員函數(shù)來支持運行時的類型信息;IsKindOf和GetRuntineClass。函數(shù)IsKindOf指示一個對象是屬于規(guī)定的類或者是從規(guī)定的類中派生出來的。CRuntimeClass類對象中包含了一個類的運行時信息,包括這個類的類名,基類名等信息。通過它可以很容易獲得一個指定的運行時刻信息。

8.2.3 應用程序體系結(jié)構(gòu)類
    該類用于構(gòu)造應用程序框架的結(jié)構(gòu),它能提供多數(shù)應用程序公用的功能。編寫程序的任務是填充框架,添加應用程序?qū)S玫墓δ堋贸绦蝮w系結(jié)構(gòu)類主要有與命令相關(guān)的類,窗口應用程序類,文檔/視圖和線程基類等。
    CWinApp表示應用程序本身,幾乎所有的基于MFC的應用程序都是從它派生一個類,并通過創(chuàng)建這個派生類的對象來創(chuàng)建一個應用程序?qū)ο?。CWinApp類繼承關(guān)系如圖8-1所示。
1. 命令相關(guān)類:CCmdTarget類
    該類是Cobject的子類,它是MFC庫中所有具有消息映射屬性的基類。消息映射規(guī)定了當一個對象接收到消息命令時,應調(diào)用哪一個函數(shù)對該消息進行處理。程序員很少需要從CCmdTarget類中派生出新類如窗口類(CWnd),應用程序類(CWinApp),視圖類(Cview)及框架窗口類(VFrameWnd)等。
2. 線程基類:CWinThread類
    所有線程的基類直接使用。它封裝操作系統(tǒng)的線程化功能。CWinTread對象表示一個執(zhí)行的線程,成員函數(shù)如CreateThread,SetThreadPriority和SuspendThread提供MFC程序用來創(chuàng)建和操作線程的工具。CWinApp類就是從CWinThread類中派生的。
3. 窗口應用程序類:CWinApp類
    每個應用程序有且只有一個應用程序?qū)ο?,在運行程序中對象與其他對象相互協(xié)調(diào),該對象從CWinApp類中派生。CWinApp類封裝了初始化,運行,終止應用程序的代碼。
    CWinApp類中包含了若干個共有的數(shù)據(jù)成員,部分數(shù)據(jù)成員如表8-1所示。

                        表8-1 CWinApp類中定義的部分數(shù)據(jù)成員
     數(shù)據(jù)成員                                           功能描述
  m_pszAppName                                       保存應用程序的名稱
  m_hInstance                                        標識當前的應用程序?qū)嵗?
  m_lpCmdLine                                        指向應用程序的命令行參數(shù)的指針
  m_nCmdShow                                         指定窗口初始化的風格
  m_bHelpMode                                       指定在用戶按下Shift+F1鍵時是否作出相應的幫助響應
  m_pActiveWnd                                       指向容器應用程序主窗口的指針
  m_pszExeName                                      應用程序可指向文件模塊的名稱
  m_pszHelpFilePath                                  應用程序的幫助文件的路徑
  m_pszProfileName                                   應用程序初始化(.ini)文件名
  m_pszRegistryKey                                   決定應用程序的初始化文件的存放地點
    CWinApp類中包含了若干公有的成員函數(shù),部分如表8-2所示
                                      表8-2 CWinApp類中的公有成員函數(shù)
                函數(shù)名                                  功能描述
        CWinApp                                    構(gòu)造應用程序?qū)ο?
        LoadCursor                                 向應用程序中加載光標資源
        LoadStandardCursor                         向應用程序中加載系統(tǒng)默認的光標資源
        LoadIcon                                   向應用程序中加載圖標資源
        LoadStandardIcon                           向應用程序中加載系統(tǒng)默的圖標資源
        ParseCommandLine                           對命令行中的參數(shù)和標志進行分析
        ProcessShellCommand                        處理命令行中的參數(shù)和標志
        GetProfileInt                              從程序的ini文件中獲取一個整數(shù)值
        WriteProfileInt                            向程序的ini文件中寫入一個整數(shù)值
        GetProfileString                           從程序的ini文件中獲取一個字符值
        WriteProfileString                         向程序的ini文件中寫入一個字符值
        AddDocTemplate                             向應用程序的文檔模板列表中加入一個文檔模板
        GetFirstDocTemplatePosition                獲取文檔模板列表中第一個文檔模板的位置
        OpenDocumentFile                           打開一個文檔對象
        InitInstance                              執(zhí)行程序的初始化操作
        Run                                        啟動默認的消息循環(huán)
        OnIdle                                     應用程序閑置時的出來程序
        ExitInstance                               結(jié)束應用程序的操作
        CloseAllDocument                           關(guān)閉所有打開的文檔對象
        SaveAllModifiled                           提示保存修改過的文檔對象
        SetDialogBkColor                          設置對話框的默認背景色
      CWinApp中定義的部分函數(shù)功能又是也可以通過MFC提供的全局函數(shù)來實現(xiàn),這些全局函數(shù)一般都以Afx為前綴。

4. 文檔/視圖類
    文檔對象由文檔模板對象創(chuàng)建,管理應用程序的數(shù)據(jù)。Cdocument支持標準的文檔操作,這些操作包括文檔的創(chuàng)建,下載保存。一個應用程序可以操作多個文檔類型,每一個文檔類型都有特定的文檔模板。文檔模板指定了該文檔所需的資源,而且每一個文檔對象包含一個指向起相聯(lián)的文檔模板的指針。這些模板及類由:
    CDocTemplate:文檔模板基類。文檔模板是協(xié)調(diào)文檔,視圖和框架窗口的創(chuàng)建。
    CSingleDocTemplate:單文檔界面的文檔模板。
    CMultiDocTemplate:多文檔界面的文檔模板。
    Cdocument:應用程序?qū)S梦臋n的基類。
    Cview:顯示文檔模板數(shù)據(jù)的應用程序?qū)S械囊晥D基類。

    Cdocument類誒用戶自定義的文檔類提供了基本的功能支持,它在MF從中的層次關(guān)系如圖8-2表示。用戶通常用File Open命令打開一個文檔,用File Save命令來保存文檔,基于這些文檔的共性,MFC提供了一個Cdocment類來對此進行封裝。
    用戶通過和文檔相關(guān)聯(lián)的視圖對象與文檔進行交。一個視圖顯示文檔中的信息,并把用戶在框架窗口的操作轉(zhuǎn)換成對文檔操作的相應命令。文檔模板指定了視圖的類型和顯示每種文檔的對于窗口。
    視圖類為用戶自定義視圖提供了最基本功能的支持。一個視圖充當了溝通用戶和文檔的中間橋梁的作用。
在MFC類庫中一部分是從Cview類派生出來的,如表8-4所示。

                            表8-4  Cview的派生類
               派生類名                                       功能簡介
             Cscrollew                                    帶有滾動條的視圖
             CCtrlView                                    帶有樹狀,列表框等控件的視圖
             CDaoRecordView                               在一個對話框中顯示數(shù)據(jù)庫記錄的視圖
             CEditView                                    一個通過多行文本編輯器的視圖
             CListView                                    帶有列表框控件的視圖
             CRecordView                                  在一個對話框中顯示數(shù)據(jù)庫的視圖
             CRichEditView                                一個具有格式文件編輯功能的編輯控件的視圖
             CTreeView                                    一個具有樹狀控件的視圖
             CPreviewView                                 支持打印預覽

    當一個文檔中數(shù)據(jù)被修改時,每一個與此文檔相關(guān)聯(lián)的視圖都必須反映出來所作的更改。Cdocument類提供了一個UpdateAllView成員函數(shù)來修改所有和文檔有關(guān)的視圖。當應用程序中使用該類時,必須實現(xiàn)一下步驟:
   (1) 從Cdocument為每一種文檔類型派生一個子類
   (2) 添加成員變量一儲存文檔數(shù)據(jù)
   (3) 實現(xiàn)對文檔數(shù)據(jù)進行讀寫,修改的成員函數(shù)
   (4) 在用戶種定義的文檔中重載Cobject::Serialize成員函數(shù)以實現(xiàn)從磁盤上對文檔數(shù)據(jù)的讀寫。

8.2.4 可視對象類
1. 窗口類:CWnd類
    該類提供了MFC中所有窗口類的基本功能。CWnd類和消息映射機制隱藏了窗口函數(shù)WndProc。一個Windows消息通過消息映射發(fā)送到相應的CWnd類OnMessage成員函數(shù)。程序員可以重載OnMessage成員函數(shù)以對特定分消息進行處理。CWnd類是CCmdTarget類的子類,創(chuàng)建Windows窗口要分兩步走:首先引入構(gòu)造函數(shù),構(gòu)造一個CWnd對象,然后調(diào)用Create建立Windows窗口并將它連到CWnd對象上。MFC中還從CWnd類派生出了進一步的窗口類型以完成更具體的窗口創(chuàng)建工作,這些派生類有:
         CFrameWnd:框架窗口類,SDI應用程序主要框架窗口的基類。
         CMIDFrameWnd:多文檔框架窗口類,MDI應用程序主框架窗口的基類。
         CMDIChildWnd:多文檔框架窗口類,MDI應用程序文檔框架窗口的基類。
2. 視類:Cview類
    該類表示框架窗口的客戶區(qū)和顯示文檔數(shù)據(jù)并接收輸入的客戶區(qū),其派生類主要有如下幾種:
         CScrollView:具有滾動條功能的視的基類。
         CFormView:其布局在對話框中定義的滾動視。
         CEditView:具有文本編輯,查找,替換和滾動功能的視。
3. 菜單類:Cmenu類
    該類是Cobject類的子類,它提供一個面向?qū)ο蟮牟藛谓缑妗K且粋€WindowsHMenu的封裝,提供了與窗口有關(guān)的菜單資源建立,修改,跟蹤及刪除的成員函數(shù)。
4. 對話框類:Cdialog類
    由于對話框是一個特殊的窗口,所以該類是從CWnd中派生出來的。對話框子層次結(jié)構(gòu)包括通用對話框類Cdialog以及支持文件選擇,顏色選擇,字體選擇,打印,替換文本的公共對話框子類。這些子類包括:
         CFileDialog:提供打開或保存的標準對話框。
         CColorDialog:提供選擇一種顏色的標準對話框。
         CFontDialog:提供選擇一種字體的標準對話框。
         CPrintDialog:提供打印一個文件的標準對話框。
         CFindReplaceDialog:提供一次查找并替換操作的標準對話框。
         Cdialog:該類可用于建立模態(tài)和非模態(tài)對話框模型,是該子層次結(jié)構(gòu)的根。
5. 控件類
     控件子層次結(jié)構(gòu)包括若干類,使用這些類可建立靜態(tài)文本,命令按鈕,位圖按鈕,列表框,組合框,滾動條,編輯框等。主要控件類如下:
         Cstatic:靜態(tài)文本控件窗口。常用于標注,分隔對話框或窗口的其他控件。
         Cbutton:按鈕控件窗口。該類為對話框或窗口的按鈕,檢查框或單選按鈕提供一個總的接口。
         Cedit:編輯框控件。編輯框控件用于接收用戶的文字輸入。
         CScrollBar:滾動條控件。提供控件條的功能,用作對話框或窗口中的一個控件,用戶可通過它在某一個范圍定位。
         CListBox:列表框控件。列表框用于顯示一個組列表框,用戶可以移動游標選擇一個值或一個范圍。
         CComboBox:組合框控件。組合框由一個編輯框控件加一個列表框組成。
         CBitmapButton:帶有位圖而非文字標題的按鈕。
6. 控件條類:CControlBar
    控件條子層次結(jié)構(gòu)為工具條,狀態(tài)條,對話框和分割窗口建立模型。該類是CToolBar,CStatusBar,CDialogBar的基類,負責管理工具條,狀態(tài)條,對話框的一些成員函數(shù)??丶l指的是連接在主窗口框架的頂部或底部的小窗口,它具有如下基類:
         CStatusBar:狀態(tài)條控件窗口的基類。
         CToolBar:包含非基于HWND的位圖式命令按鈕的工具條控件窗口。
         CDialogBar:控件條形式的非模態(tài)對話框。
7. 繪畫對象類:CGdiObject類
    圖形繪畫對象子層次結(jié)構(gòu)以CGdiObject類為根類,可用于建立繪畫對象模型,如畫筆,畫刷,字體等。這些子類有:
         Cbitmap:封裝一個GDI位圖,提供一個操作位圖的接口。
         Cbrush:封裝一個GDI畫刷,可選擇為設備描述表的當前畫刷。
         Cfont:封裝一個GDI字體,可選擇為設備描述表的當前字體。
         Cpen:封裝一個GDI畫筆,可選擇為設備描述表的當前畫筆。
8. 設備描述表類:CDC類
    該類及其子類支持設備描述表對象,是Coject類的子類。CDC類是一個較大的類,包括許多成員函數(shù),如映射函數(shù),繪畫工具函數(shù),區(qū)域函數(shù)等,通過CDC對象的成員函數(shù)可以完成所有的繪畫工作,它的子類具體請看p187頁介紹。

8.2.5 通用類
    通用類提供了許多服務,例如文件I/O,診斷和異常處理類,此處還包括數(shù)組和列表等存放數(shù)據(jù)集的類。
1. 文件類:Cfile類和Carchive類
    如果想編寫自己的輸入/輸出處理函數(shù),可以使用Cfile類和Carchive類,一般不必再從這些類中派生新類。以下是部分文件類:
         Cfile類:提供訪問二進制磁盤文件的總接口,Cfile對象通常通過Carchive對象被間接訪問。
         CStdioFile類:提供訪問緩存磁盤文件的總接口,通常采用文本方式。
         VMemFile類:提供訪問駐內(nèi)存文件的總接口。
         Carchive類:與Cfile對象一起通過竄行畫實現(xiàn)對象的永久存儲。
2. 異常類:Cexception類
    該類是所有異常情況的基類,供C++的try/thow/catch異常處理機制使用,它不能直接建立Cexception對象,程序員只能建立派生類對象??梢允褂门缮悂聿东@指定的異常情況,Cexception的派生類如下:
         CNotSupportedException:不支持服務異常。
         CMemoryException:內(nèi)存異常。
         CFileException:文件異常。
         CResourceException:資源異常。
         COleException:OLE異常。
         CDBException:數(shù)據(jù)庫異常。
         CUseException:終端用戶操作異常。
    產(chǎn)生異常的原因描述將儲存再異常對象的m_cause數(shù)據(jù)成員中。
3. 模板收集類
    這些類可以將對象存放到數(shù)組,列表和映射中。單這些收集類是模板,它們的參數(shù)確定了存放在集合的對象類型。Carray,Cmap和Clist類使用全局幫助函數(shù),幫助函數(shù)通常必須定制。類型指針是類庫中其他類的包裝類,利用這些包裝類,應用程序可借助于編譯器的類型檢查以避免出錯,下列是部分模板收集類:
         Carray類:將元素存儲在數(shù)組中。
         Cmap類:將鍵映射到值。
         Clist類:將元素存儲在一鏈表中。

8.2.6  OLE類
    OLE是處理復合文檔的一種方法,代表對象鏈表和嵌入技術(shù)。所謂復合文檔,就是在一個文檔中同時保存了如文本,圖像和聲音等多種不同類型的數(shù)據(jù),而這些數(shù)據(jù)又可以通過不同程序不同格式產(chǎn)生。
    MFC中提供了對OLE技術(shù)體系的全方位的支持。它提供OLE基類,可視編輯容器類,可視編輯服務器類,數(shù)據(jù)傳送類, OLE對話類和雜項等六種類來封裝OLE技術(shù)。
    目前基于OLE的類比較豐富。主要有:
    普通類:COleDocument,COleItem,COleException為支持的普通類。
    客戶類:COleClientDoc,COleClientItem為支持的OLE客戶類。
    服務類:COleServer,COleTemplate,COleServerDoc,COleServerItem為支持的OLE的服務類。
    可視編輯容器類:COleClientItem及COleLinkingDOC提供用于OLE容器的基礎(chǔ)結(jié)構(gòu)區(qū)支持可視編輯類。
    數(shù)據(jù)傳送類:COleDropSource,COleDropTarget,COleDataSource和COleDataObject封裝拖放操作及通過剪貼板進行數(shù)據(jù)傳送操作。
    對話類:COleInsertDialog顯示標準的OLE對話框。
    雜項類:如CRectTracker,它圍繞一個插入在復合文檔中的項建立邊框,這樣可使該項移動和調(diào)整大小。

8.2.7  ODBC數(shù)據(jù)庫類
    為了支持向帶有ODBC驅(qū)動程序的各種數(shù)據(jù)庫管理系統(tǒng)提供標準化界面ODBC標準,MFC提供了Cdatabase和Crecordset類。Cdatabase封裝對一數(shù)據(jù)源的連接,通過此連接應用程序可在該數(shù)據(jù)源上進行操作,Crecordset類封裝了從一數(shù)據(jù)源選出一組記錄。ODBC子層次結(jié)構(gòu)提供了一些類支持ODBC特征,同時,這些類封裝了ODBCAPI,并允許用戶繼承自Crecordset類的成員函數(shù)把存儲在數(shù)據(jù)庫中的數(shù)據(jù)作為被查詢,更新和其他方式操作的對象來處理,即通過這些類可開發(fā)數(shù)據(jù)庫應用程序類訪問多個數(shù)據(jù)庫文件。該層次結(jié)構(gòu)中主要包括的類有:
    CRecordView:它由CFormView派生,該類將記錄對象連接到顯示當前記錄的字段值的一個表單視圖來簡化操作。
    CFileExchange:提供上下文信息,支持記錄字段交換,即在字段數(shù)據(jù)成員,記錄對象的參數(shù)數(shù)據(jù)成員及數(shù)據(jù)源上的對應列表之間進行數(shù)據(jù)交換。
    CLongBinary:封裝一存儲句柄,用于存儲二進制的對象,例如位圖等。
    CDBException:記錄數(shù)據(jù)存取處理過程的失敗產(chǎn)生的異常。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多