MFC框架程式剖析

2021-06-27 07:38:22 字數 3670 閱讀 3969

1、mfc(microsoftfoundation class,微軟基礎類庫)是微軟為了簡化程式設計師的開發工作所開發的一套c++

類的集合,是一套物件導向的函式庫,以類的方式提供給使用者使用

二、基於mfc的程式框架剖析

1、mfc程式的classview標籤頁(圖)

2、繼承關係

(1)cmainframe繼承於cframewnd

(3)ctestdoc繼承於cdocument

(4)ctestview繼承於cview

注:cframewnd和cview都繼承於cwnd

3、cwnd類是mfc中乙個非常重要的類,它封裝了與視窗相關的操作

4、mfc類的簡化組織結構圖(圖)

5、mfc程式也有乙個winmain函式,程式是在編譯時,由鏈結器將它鏈結到程式中

7、對於普通的vc++控制台程式,無論全域性變數還是全域性物件,程式執行時,在載入main函式之前,就已經為它們

分配了記憶體空間。對於乙個全域性物件來說,此時就會呼叫該物件的建構函式,構造該物件,並進行初始化操作

8、例項控制代碼與全域性物件

(1)對於win32sdk程式,應用程式的例項是由例項控制代碼(winmain函式的hinstance引數)來標識的

9、基類建構函式中this指標的指向問題

在構造子類物件時,會自動呼叫父類的建構函式,此時在父類的建構函式中的this指標所指向的是子類物件位址

10、afxwinmain函式

mfc程式的winmain函式是通過呼叫afxwinmain函式來完成它的功能的

在afxwinmain函式中,通過呼叫initinstance函式來完成mfc內部管理方面的工作

12、afxenddeferregisterclass函式

mfc提供了一些預設的標準視窗類,我們只需要選擇所需的視窗類就行。然後,呼叫afxenddeferregisterclass

函式來註冊視窗類

13、cmainframe::precreatewindow函式

mfc程式具有兩個視窗(框架視窗和視類視窗),在框架視窗產生之前會呼叫precreatewindow函式

14、cwnd::createex函式

在mfc程式中,視窗的建立是由createex函式實現的

15、cwnd::createwindowex函式

主要作用是當修改了createex函式的createstruct引數時,createwindowex函式會根據引數發生的相應變化來創

建乙個符合我們要求的視窗

注:mfc中字尾名為ex的函式都是擴充套件函式

16、cmainframe::showwindow函式和cmainframe::updatewindow函式

用於顯示應用程式框架視窗和更新這個視窗

17、cwinthread::run函式和cwinthread::pumpmessage函式

用於完成訊息迴圈

18、defwindowproc函式

預設的視窗過程,但mfc程式對訊息的處理實際上是通過訊息對映機制來完成的

19、mfc程式的執行過程

(3)進入winmain函式

(4)進入訊息迴圈

20、mfc程式的主要過程

_twinmain(winmain函式的巨集)

->

afxwinmain函式->

afxenddeferregisterclass函式

->

cmainframe::precreatewindow函式->

cframewnd::precreatewindow函式

->

afxdeferregisterclass(afxenddeferregisterclass函式的巨集)->

cframewnd::create函式

->

cwnd::createex函式->

cmainframe::precreatewindow函式->

cwnd::createex函式

->

cmainframe::showwindow函式->

cmainframe::updatewindow函式

->

cwinthread::run函式->

cwinthread::pumpmessage函式

21、框架視窗(整個應用程式外框所包括的部分)是視類視窗(框架視窗中空白的地方)的乙個父視窗

22、mfc提供了乙個文件/視類的結構,文件是指cdocument類,視類是指cview類。前者用於資料的儲存和載入,

後者用於資料的顯示和修改

23、框架物件、文件物件和視類物件是通過乙個單文件模板指標來有機地組織在一起,並利用adddoctemplate函式

把這個單文件模板新增到文件模板中,從而把這三個類組織成為乙個整體

24、mfc程式的caboutdlg類繼承於cdialog類,用於為使用者提供一些與程式相關的幫助資訊

三、視窗類、視窗類物件與視窗

1、以「::」開始的函式是乙個全域性函式,表示呼叫的是platform sdk的函式

2、如果我們關閉了乙個視窗,這個視窗就銷毀了,那麼該視窗對應的c++視窗類物件銷毀了嗎?

(1)當乙個視窗銷毀時,它會呼叫cwnd::destroywindow函式,該函式銷毀視窗後,將cwnd::m_hwnd設為null

(2)視窗的生命週期和c++視窗類物件的宣告週期不是一致的。當乙個視窗銷毀時,與c++視窗類物件沒有關係,它

們之間的紐帶僅僅在於這個c++視窗類內部的成員變數m_hwnd,該變數儲存了與這個c++視窗類物件相關的哪個視窗

的控制代碼(3)但是,當c++視窗類物件銷毀時,與之相關的視窗也將銷毀,因為它們之間的紐帶m_hwnd已經斷了

3、示例---在視窗中顯示按鈕

(1)cbutton按鈕類繼承於cwnd

(2)對於乙個cbutton物件,在定義之後就可以使用了;但是,如果要顯示這個按鈕的話,還需呼叫

cbutton::create函式,把按鈕視窗與cbutton物件關聯起來

(3)mfc程式的視窗建立時都會產生wm_create訊息,該訊息通過oncreate函式來捕獲。對於框架視窗來說,mfc直

接把oncreate函式提供到了cmainframe中;而在視類視窗中沒有提供該函式,如需使用,要使用者自行新增

(4)通常對mfc程式的操作,都是在ctestview視類視窗中進行的

(5)在視窗建立之後,要顯示該視窗可以通過呼叫showwindow函式或指定視窗風格為

ws_visible來實現

(6)實現過程

a:在ctestview類中,新增cbutton型別的私有成員m_btn

b:在ctestview類中,新增wm_create訊息的oncreate處理函式

c:在ctestview類中,通過getparent函式可以獲得cmainframe框架視窗物件的指標

d:實現一(在視類視窗中通過showwindow函式顯示按鈕)

intctestview::oncreate(lpcreatestruct lpcreatestruct)

e:實現二(在視類視窗中通過ws_visible風格顯示視窗)

int ctestview::oncreate(lpcreatestructlpcreatestruct)

f:實現三(在框架視窗中顯示按鈕)

intctestview::oncreate(lpcreatestruct lpcreatestruct)

MFC框架程式剖析

mfc程式的執行過程 4 進入訊息迴圈。雖然也設定了預設的視窗過程函式,但是mfc應用程式實際上是採用訊息對映機制來處理各種訊息的。當收到wm quit訊息時,退出訊息迴圈,程式結束。面已經知道,在乙個windows程式中,winmain函式作為程式的入口函式,乙個程式的是 設計視窗 給視窗設定相應...

三 MFC框架程式剖析

1.cwnd 類 cwnd 類是mfc中乙個重要的類,它封裝了與視窗有關的操作。2.mfc 中的winmain mfc全域性物件 5.afxwinmain 函式 winmain 6.設計和註冊視窗 mfc已經為我們預定義了一些預設的標準視窗類,只需要選擇所需的視窗類,然後註冊就可以了。視窗類的註冊是...

MFC框架程式剖析 3

我們來看下我們建立的視窗 視視窗對應的是ctestview類,而主框架視窗對應的就是cmainframe類,而cmainframe和ctestview都有共同乙個基類cwnd,它封裝了與視窗相關的操作。此外,還有個ctestdoc類,不過它並不是乙個視窗類,而是乙個文件類。最後,caboutdlg類...