MFC六大關鍵技術之仿真學習筆記(一)

       相信大多數MFC初學者都有一種這種感覺,MFC的框架如此複雜,宏定義虛函數讓你不知所措,和傳統的Win32SDK編程相比,MFC確實讓你足夠頭疼,粗略看看你發現找到Winmain和WndProc都不是一件容易的事。《深入淺出MFC》第三章將MFC的關鍵技術仿真出來,讓你領略Application framework的內部機制,當然,這並不是一件容易的事情,從粗讀到理解運用,這是一個付出心血的過程。其實拋開對MFC框架的一些主觀看法,MFC框架確實值得研究學習。


*MFC的初始化過程

先上類圖



定義一個全局變量,CMyWinApp theApp,此時main函數如下:

int _tmain(int argc, _TCHAR* argv[])
{
	CWinApp * pApp = AfxGetApp();
	system("pause");
	return 0;
}
此時運行輸出結果如下:


並未new任何對象,但是有一個全局對象theApp存在,在進入main之前,theApp完成構造,根據對象繼承關係,不難得出上述結果。

全局函數AfxGetApp獲得theApp對象指針,這也是MFC的手法:

CWinApp* AfxGetApp()
{
	return theApp.m_pCurrentWinApp;
}
m_pCurrentWinApp於CWinApp構造函數完成初始化,如下:

CWinApp()
	{
		m_pCurrentWinApp = this;
		std::cout << "CWinApp Constructor \n";
	}
注:這只是一個以MFC2.5的仿真模型,爲後來的模型建立框架,在實際MFC 4.X以上CWinApp並未有m_pCurrentWinApp這個成員變量,AfxGetApp定義如下:
CWinApp* AFXAPI AfxGetApp()
{ 
        return afxCurrentWinApp;
 }
#define afxCurrentWinApp    AfxGetModuleState()->m_pCurrentWinApp
可知,m_pCurrentWinApp在AFX_MODULE_STATE中,並不如仿真一樣。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章