基本概述
A pointer to the single CWinApp object for the application.
返回指向應用程式的單一的CWinApp對象的
指針。
注意:
The pointer returned by this function can be used to access application information such as the main message-dispatch code or the topmost window.
這個函式返回的指針可以被用來訪問應用程式的信息,比如主訊息調度代碼以及頂層視窗等。
例子:
// Print the application's executable filename.
TRACE("Executable filename = %s\n", AfxGetApp()->m_pszExeName);
AfxGetApp 解剖
AfxGetApp( )是全局的。
void writeString(char* pString)
{
CMyDlg * pDlg;
pDlg=(CMyDlg *) pWnd;
pDlg->ShowMsg(pString);
}
AfxGetApp( )這個函式可以得到當前引用的指針CWinApp*,通過這個指針可以訪問到這個進程中的對象。
==============================================================================
我們在任何一個VC工程中都會看到一個類似於:
//Test.cpp檔案中
的語句。它是指向工程對象的一個
指針,你可以用它訪問Test工程的成員函式和變數。
如果工程中添加了一個CConfig類,在CConfig中想調用Test工程中的成員函式和變數,則可以這樣調用之:
CTestApp*pApp = (CTestApp*)AfxGetApp( ); 如果在CTest類中我們聲明如下一些變數:
//Test.cpp檔案
class CTestApp: public CWinApp
{
CTestApp( );
CString str;//添加的對話框變數
...
}
//Test.cpp檔案
{
str="abc";
}
好了,現在我們就在CConfig類中調用str吧!
//Config.cpp檔案
CTestApp *pApp=(CTestApp *)AfxGetApp( );
這樣,就實現了對CTestApp類中變數的調用。
================================================================
這兩個函式可以合成一個: afxgetmainwnd();
================================================================
我通常把一些重要的工程一開始就需要初始化的並且在其它地方類中都要用到的變數或
函式定義在C***App類中,然後通過此函式獲得這些變數或函式。
如果把變數在你的C*App類中定義,就可以通過通過AfxGetApp()獲取C*App的
指針,這樣就可以調用它的變數了.如果是全局變數,這不需要用這個
函式調用它AfxGetApp()的
返回值是指向theApp的指針,與全局變數無關。
AfxGetApp()這個函式在VC當中很常見,主要是用來獲得
CWinAPP生成的全局對象的。一般情況下將其
強制類型轉換成你自己寫的App類就可以調用裡面的方法了。但是如果編寫的是DLL程式的話,情況會稍有不同。你會發現在DLL中調用AfxGetApp這個函式會得到DLL的
套用對象。原因出現在DLL的模組狀態上。應用程式在調用DLL時為了保證資源不出問題,往往會調用一句:
注意這是一個宏。他的作用是切換模組的
全局變數範圍,即把應用程式的那些全局變數拷貝切換到這個DLL的全局變數拷貝,自然用AfxGetApp得到就是DLL裡面的這個APP了。如果想訪問應用程式的
App對象,那么只要把模組狀態切換回去就可以了,記著執行完後一定要把狀態再切換回來啊,否則就要出問題了。
例如: