MFC基本框架

2021-05-22 15:47:03 字數 4467 閱讀 6785

mfc基本框架

by  小戴 發表於 2006-12-21 15:59:00 

mfc 應用程式框架

1、 mfc 簡介:

mfc ( microsoft foundation class )是由微軟公司編寫的一套專門用於 windows 程式設計的 c++ 基礎類庫, vc++ 程式設計基本上都是圍繞著 mfc 類庫來進行的。它封裝了 windows api 的絕大多數功能,為使用者開發 windows 應用程式建立了乙個非常靈活的應用程式框架。

cobject 是 mfc 類庫的根類。

mfc 類庫包括:

(1)ccmdtarget 類:是 cobject 類的子類,它是 mfc 庫中所有具有訊息對映屬性的類的公共基類。它的子類有 cwinthread 類, cwnd 類、 cdocument 類,從 c***target 類派生的類能在程式執行時動態建立物件,並處理命令訊息。

(3)  cwnd 類:視窗類,是 ccmdtarget 類的子類,從 cwnd 派生的類可以擁有自己的視窗,並對它進行控制。視窗框架類 cframewnd 和 cview 類是 cwnd 的子類,前者建立和維護視窗的邊框、選單欄、工具欄、狀態列,負責顯示和搜尋使用者命令,後者負責為文件提供乙個或幾個檢視。檢視的作用是為修改、查詢文件等任務提供人機互動的介面。

(4)  文件類 cdocument 類:是 ccmdtarget 類的子類,負責封裝和維護文件。文件包括應用程式的工作成果或環境設定資料等,可以是程式需要儲存的任何內容。

乙個 mfc 應用程式並不直接操作上述類,而是以上述類為基類派生新的類,構建 windows 應用程式的基本框架。

2、構建 windows 應用程式的基本類

當你建立了乙個名為 exam1_1 的 mfc 應用程式時,就建立了必要的類。

?  應用程式的訊息對映。

?  乙個空的應用程式類的建構函式。

?  乙個 initinstance 函式的標準定義。

initinstance() 函式:負責應用程式的初始化工作,建立文件模板、文件、檢視和主視窗,該函式是唯一乙個必須過載的函式。

run() 初始化結束後,由 winmain() 函式呼叫處理訊息迴圈,乙個文件 / 檢視應用程式絕大多數時間處於 run() 函式的執行過程中。

exitinstance() 函式:當使用者退出程式時,該函式被呼叫。

onidle() 函式:當沒有視窗訊息需要處理時由視窗框架呼叫,通常用於執行後台任務。

(2) 主框架類: cmainframe

cmainframe 代表的是程式懂得主框架視窗,乙個 windows 應用程式除了白色部分的檢視外,程式的主視窗的其他部分都歸 cmainframe 管理。

單文件程式的主框架視窗是在呼叫 processshellcommand() 函式時建立的,在主框架視窗建立之前, cmainframe::precreatewindow() 函式將被自動呼叫。在這個函式中可以更改主框架視窗的風格,或者對視窗類的一些屬性進行修改,此時視窗控制代碼還不可用。

當 windows 通過 win32 函式 createwindowex() 接收到建立主框架視窗的請求時,它會在系統內部為視窗分配資源,並進行一些設定工作,此時視窗控制代碼就可以使用了,當 windows 從 createwindowex() 函式返回之前,它向程式傳送 wm_create 訊息,讓程式完成一些必要的初始化工作, cmainframe::oncreate() 函式就是 wm_create 訊息的處理函式,這個函式首先呼叫了基類 cframewrd 的處理函式,讓基類完成初始化工作,然後為主框架視窗建立工具欄和狀態列。

cmainframe 的兩個成員變數 m_wnd******* 和 m_wndstatusbar 分別對應著程式主視窗中的工具欄和狀態列。 c*******::load*******() 函式負責裝載工具欄資源,而 c*******::createex() 函式負責工具欄的建立。狀態列的使用需要乙個陣列來定義狀態列類各個窗格的 id ,這個陣列就是 indicators 。 cstatusbar::create() 函式負責狀態列的建立, cstatusbar::setindicators() 函式負責設定狀態列上的窗格。

?  文件 / 檢視結構

文件 / 檢視結構是 mfc 應用程式最核心的概念,它將應用程式的資料和瀏覽、運算元據的方法分離。換句話,文件物件通常代表乙個已經開啟的檔案,而檢視物件表示文件中的資料的視覺化表示,並提供視覺化互動介面允許使用者檢視、編輯資料。

?  文件 / 檢視結構:

應用程式的資料儲存在文件物件中,並可以顯示在檢視。文件與檢視的關係是 1 對多的關係。乙個 mfc 應用程式開始執行後,應用程式負責傳遞訊息到視窗框架物件和檢視物件。文件物件負責管理資料,檢視物件按特定的方式反映當前文件物件中資料,檢視和框架同時提供視覺化的介面與使用者實現互動,使用者使用滑鼠和鍵盤操作應用程式的選單、工具欄及控制項,發出命令訊息,輸入訊息,應用程式接收訊息,接收輸入訊息,並以預先定義的方式響應使用者的操作。

(3)  文件類

應用程式中的文件類是 cdocument 類的派生類, cdocument 類主要的成員函式及功能如下:

onnewdocument() 函式:初始化乙個新的文件物件,當建立乙個新文件時,系統自動呼叫該函式,預設過載。

onopendocument() 函式:當從磁碟開啟乙個檔案時被系統自動呼叫,可過載。

deletecontents() 函式:刪除文件物件的內容。當文件被關閉時系統自動呼叫,可過載。

serialize() 函式:文件序列化函式,用於從乙個檔案中讀取內容到文件物件,或者將文件物件的內容儲存到檔案。預設過載。

updateallview() 函式:更新與文件物件關聯的所有檢視,該函式自動呼叫每個相關的檢視物件的 onupdate() 函式實現更新操作。

setmodifiedflag() 函式:設定或清除文件的資料是否已被修改的標誌,該標誌決定執行應用程式關閉操作時,是否會彈出對話方塊確認讓使用者是否需要儲存檔案。

ismodified() 函式:如果文件物件包含未儲存資料,則返回乙個非零值,否則返回乙個零值。

gettitle() 函式:返回表示文件標題的文字串,如果文件沒有標題返回空串。

getfirstviewposition() 函式:返回乙個 cview 型別的指標,指向與當前文件物件相關的一組檢視的位置。

getnextview() 函式:返回乙個 cview 型別的指標,指向與當前文件物件相關的一組檢視中的下乙個檢視。

serialize() 函式:將檔案中的資料裝入到文件物件或將文件物件的資料儲存到檔案中。

(4)檢視類:

檢視類用於顯示儲存在文件類物件中的資料,並允許使用者編輯這些資料。應用程式中,檢視類是 cview 類的派生類, cview 類的主要成員如下:

getdocument() 函式:返回乙個指向相關文件物件的指標,通過該指標,可以在檢視類的成員函式中操作文件物件的資料,實現輸出。

ondraw() 函式:支援列印,列印預覽和螢幕輸出。

onupdate() 函式:當文件物件的資料更新後,需要更新檢視時呼叫。預設對整個檢視進行更新,可編寫**過載該函式,僅更新部分檢視。

應用程式的檢視類可以直接從 cview 類中繼承,也可以從檢視類的派生類中繼承。主要有:

?  csrollview 類:具有滾動功能的檢視類的基類。

?  cformview 類:其布局在對話資源中定義的滾動檢視類。

?  ceditview 類:顯示乙個編輯控制項,提供多行文字的編輯,具有文字編輯、查詢、替換和滾動功能。

?  clistview 類:顯示乙個列表控制項的類。

?  ctreeview 類:顯示乙個樹控制項的類。

?  crecordview 類:支援對話方塊資料交換的類。

?  cctrlview 類:支援直接基於控制項的檢視。

(5)  文件模板類:

?  剖析 mfc sdi 的檔案結構:

?  工作區檔案、專案檔案:

( 1 ) .dsw 檔案:由 mfc 自動生成的工作區檔案,儲存了當前工作區所包含的專案的資訊。

( 2 ) .dsp 檔案: mfc 生成的專案檔案,或叫工程檔案,包含當前專案的設定、專案中包含的檔案等資訊。

( 3 ) .clw 檔案:類資訊檔案。

3 、應用程式原始檔和標頭檔案

對於單文件應用程式將生成:

?  應用程式的標頭檔案:含有所有全域性變數和用於包含其他標頭檔案的 #i nclude 偽指令。

?  mainfrm.cpp , mainfrm.h

4 、資源檔案:

資源檔案包含以下各類檔案:

?  一般 mfc 應用程式的預設選單定義、加速鍵表和字串表。

?  程式預設的 about 對話方塊和乙個圖示檔案。

?  標準的 mfc 類的資源。

5 、預編譯標頭檔案:

stdafx.cpp,stdafx.h 用於建立乙個預便宜的標頭檔案 exam1_1.pch 和乙個預定義的型別檔案 stdafx.obj 。

MFC基本框架結構

本文將剖析基於mfc的框架程式,mfc框架程式的內部組織結構,mfc是微軟為了簡化程式設計師的開發工作而設計的一套c 類集合,利用這些類有 效地幫助程式設計師完成windows應用程式開發。我們利用vs2008 ide建立乙個名為test的工程,程式型別選擇為單文件,其他預設不變,最終會生成一套 這...

MFC 框架學習

1.最簡單的框架程式 使用mfc基礎類庫,編寫乙個最簡單的框架程式 include public bool initinstance cframewnd pmainwnd new cframewnd pmainwnd showwindow m ncmdshow pmainwnd updatewind...

MFC執行框架

2 winmain登場 extern c int winapi twinmain hinstance hinstance,hinstance hprevinstance,lptstr lpcmdline,int ncmdshow twinmain函式的 t 是為了支援unicode而準備的乙個巨集。...