1.cobject類為mfc總類,該類下面有乙個重要的類ccmdtarget。而ccmdtarget類下面又有四個重要的繼承類,分別為:cwinthread、cdocument、cdoctemplate、
cwnd
類。所以,可以得出乙個大概繼承圖,如圖所示:
其中cwnd類下屬又有幾個重要的繼承類,分別為cframewnd、cdialog、cview、controls、
cwnd---->cframewnd
---->cdialog
---->cview
---->controls
視窗類是一切windows可見視窗,(包括主視窗,子框視窗,對話方塊,控制項,view視窗)的父類。凡是能可見的,基本上是繼承於cwnd,而抽象於其中的(即不可見的)則不繼承於它。
2.mfc標頭檔案:
■stdafx.h:該檔案用來作為precompiled header file,其內只是載入其它的mfc標頭檔案。
■afxwin.h:每個mfc程式都必須載入它,因為它以及它所載入的檔案宣告了所有的mfc類。此檔案內包含afx.h,後者又包含afxver_.h,後者又包含afxv_w32.h,後者又包含windows.h
■afxext.h:凡使用工具欄、狀態列的程式必須載入此檔案。
■afxdlgs.h:凡使用通用型對話方塊(common dialog)的mfc程式要載入此檔案。
■afxcmn.h:凡使用windows9x新增的通用型控制項(common control)之mfc程式需載入此檔案。
■afxcoll.h:凡使用collections class(處理資料結構如資料,鍊錶類等)之程式需載入此檔案。
■afxdllx.h:凡mfc extension dlls需載入此檔案。 ■
afxres.h:mfc程式的rc檔案必須載入此檔案。mfc對於標準windows資源(如file,edit等)的id均有預設定義,這此定義在該標頭檔案內。
3.什麼是precompiled header:
乙個應用程式在發展過程中需不斷的編譯,而windows程式載入的.h標頭檔案非常巨大且內容不變,編譯器如果不precompiled的話,每次需要編譯的時間非常多,所以precompiled header就是將.h檔案一次編譯後的結果儲存起來,第二次編譯時就可以直接從磁碟中讀取。
4.關於應用程式的進入點winmain和視窗過程wndproc:
mfc
6.cframewnd類取代了sdk中的wndproc地位
眾所周知,wndproc是用來處理視窗(包括初始化,處理訊息,顯示等)的函式,那麼cframewnd也是,首先在標頭檔案中,我們要繼承乙個cframewnd的類,並在此定義要處理的訊息(declare_message_map),然後,在原始檔中,定義該類的訊息實現(begin_message_map,end_message_map)
7.mfc中陰晦的winmain:
它是第一步操作登場,注意,我們沒有撰寫winmain的**,winmain是mfc早已準備好並由鏈結器直接加到應用程式**中的。_twinmain是為了支援unicode而準備的乙個巨集,實質還是winmain。好,_twinmain函式做了什麼工作呢?它只是在裡面呼叫afxwinmain函式。如下:returnafxwinmain(hinstance, hprevinstance, lpcmdline, ncmdshow);afxwinmain是乙個全域性的函式,並不屬於任乙個類。
下面讓我們來看一看afxwinmain函式做了些什麼工作?
第一、它會獲得
第二、呼叫afxwininit(...)函式,用作mfc gui程式初始化的一部分,這個函式詳見後解...
第六、最後調有
afxwinterm函式,結束該應用程式。
所以,主要的afxwinmain做的工作就應該如下**所示:
int afxapiafxwinmain(hinstance hinstance, hinstance hprevinstance, lptstr lpcmdline, int ncmdshow)
是乙個全域性函式,定義於afxwin1.inl中,如下:
而在類的建構函式中,有一段**是這樣定義的:
afx_module_state* pmodulestate =afxgetmodulestate();
9.afxwininit ----afx內部的初始化操作:②
afxwininit
,以下是它的操作摘要:
bool afxapiafxwininit(hinstance hinstance, hinstance hprevinstance,lptstr lpcmdline, int ncmdshow)
if (!afxcontextisdll)
afxinitthread();
return true; }
()函式:③
afxwininit
函式對內部初始化之後,進入第三步操作
if (m_pdocmanager != null)
m_pdocmanager->adddoctemplate(null);
else
cdocmanager::bstaticinit = false;
return true; }
這些操作都是mfc為內部管理而做的。只要記住一點,我們的派生類無需改寫它,它是關於cdocmanager的類,關於該類詳見後解
...
MFC執行過程詳解
原文 1.cobject類為mfc總類,該類下面有乙個重要的類ccmdtarget。而ccmdtarget類下面又有四個重要的繼承類,分別為 cwinthread cdocument cdoctemplate cwnd 類。所以,可以得出乙個大概繼承圖,如圖所示 cdoctemplate cdocu...
MFC 執行過程
pthread initinstance 呼叫子類中的initinstance processshellcommand cmdinfo 對命令列進行解釋 ctestdoc ctestdoc 構造文件類物件 cmainframe cmainframe 構造框架視窗物件 cframewnd loadfr...
MFC程式執行過程
一 mfc程式執行過程剖析 相信大家有點暈點了吧,實際程式設計中沒有必要深刻理解這麼多,這些大都是由mfc內部自動幫我們完成的。實際mfc程式設計過程中,其實懂得mfc程式中各個函式的執行流程即可。有時候過於追究mfc細節會白白浪費我們的精力,應該將主要精力放在使用mfc解決實際問題上。二 vc6中...