孫鑫 MFC筆記二 MFC框架剖析

2021-06-06 04:38:47 字數 1479 閱讀 2667

mfc,microsoft foundation class,微軟基礎類庫,是微軟為了簡化程式設計師的開發工作所開發的一套c++類集合,是一套物件導向的函式庫,以類的方式提供給使用者使用。

實際上,mfc同樣也有winmain函式,只是這個winmain函式被微軟封裝,同時,也封裝了每乙個視窗都需要的步驟。

在程式編譯連線時,winmain函式成為了程式的一部分。然而,mfc是如何組織起各個類的呢?

mfc大致流程:

實際上,winmain函式功能由afxwinmain函式完成,afx表示應用程式框架函式,都是全域性函式。

3 pthread->initinstance() 完成設計視窗類,註冊視窗類,建立視窗,顯示視窗,更新視窗

4  nreturncode = pthread->run(); 訊息迴圈

詳細流程:

設計和註冊視窗類

mfc實際已經預先設計好了一些預設的標準視窗類,只需要選擇註冊就可以了。註冊視窗類,用函式afxenddeferregisterclass。該函式根據視窗型別,選擇相應的類名,這些類名都是mfc預先定義好的,之後,呼叫afxregisterclass函式註冊視窗類。後者根據類的資訊,判定是否已經註冊,已經註冊,返回真,否則,註冊失敗。

實際上,mfc程式還有個框架視窗。該視窗註冊前,先通過precreatewindow,呼叫afxenddeferregisterclass,後者實際上是乙個指向afxenddefer-registerclass函式的巨集。根據程式除錯可以知道。mfc執行過程也是在全域性物件前,windmain函式後,視窗產生前註冊視窗類的。

但單文件中,視窗類的註冊提前了,牽扯到文件管理,沒有經過precreatwindow。

建立視窗:

mfc的視窗建立,是通過createex函式實現,該函式在cwnd類中,在底層**中,cframewnd類的create函式,呼叫了cwnd類中的createex函式,而cframewnd派生於cwnd類。同時,create函式,由cframewnd類的loadframe函式呼叫。由於createex即不是虛函式,也沒有被重寫,因此,create呼叫的就是基類cwnd的createex函式。也就是說,我們應用程式呼叫的createex函式,就是cwnd的成員函式。它內部實現時,又呼叫了precreatewindow虛函式。因此,這裡實際就是呼叫子類的虛函式。在這裡通過呼叫該函式,讓程式設計師修改視窗外觀,利用引用結構體。修改了子類視窗外觀,實際也就是修改了底層視窗外觀。

mfc中的ex字尾,表示擴充套件函式。

顯示和更新視窗:

在應用程式類中,有乙個繼承而來的成員變數。它是cwnd型別指標,儲存了應用程式框架視窗物件。即,指向cmainframe物件的的指標。通過呼叫顯示更新函式,顯示更新視窗。

m_pmainwnd->showwindow(sw_show);

m_pmainwnd->updatewindow();

訊息迴圈

nreturncode = pthread->run(); 訊息迴圈

視窗過程函式:

消極對映機制

MFC 選單相關(孫鑫)

三種訊息的分類及其對應的響應類 理解類和資源的關係,通常類中會有乙個成員變數作為指向資源的控制代碼,這樣可作為引數傳給類的成員函式 通常類物件不能定義為區域性變數,否則物件作用的作用域結束後 通常為右花括號 物件會被析構,相應資源也會被銷毀 就看不到應該具有的顯示效果 宣告為類的成員變數,也可以在區...

MFC學習筆記(一) MFC框架程式剖析

基於mfc的框架程式剖析 一 mfc 程式中的winmain函式 1.先來個定義,mfc 一套物件導向的函式庫,一套c 類的集合,搞windows應用程式的開發。2.mfc將大部分的windows api封裝到 中,以類成員函式的形式提供給程式設計師呼叫。3.mfc中類的命名都以字母 c 開頭,就像...

MFC框架程式剖析

1 mfc microsoftfoundation class,微軟基礎類庫 是微軟為了簡化程式設計師的開發工作所開發的一套c 類的集合,是一套物件導向的函式庫,以類的方式提供給使用者使用 二 基於mfc的程式框架剖析 1 mfc程式的classview標籤頁 圖 2 繼承關係 1 cmainfra...