全局變量的定義:
在MFC的框架中有個全局變量:
CTestApp theApp;
theApp是在進入WinMain函數之前就構造好值的。
所以可以進入WinMain函數之前是先執行theApp的構造函數。
孫鑫老師說MFC是通過應用程序類的對象來標識應用程序的實例的(這句話不明白,應該都是hInstance標識的吧,也許要等到我看侯捷老師書的時候才知道了),且每個MFC程序有且僅有一個從CWinApp派生的類。也僅有一個CWinApp派生類的對象,即僅有一個theApp對象。theApp對象就標識了應用程序本身。
即theApp是統領其它類的。
并且CWinApp類是派生于CWinThread類的,
There are two general types of threads that CWinThread supports: worker threads and user-interface threads. Worker threads have no message pump: for example, a thread that performs background calculations in a spreadsheet application. User-interface threads have a message pump and process messages received from the system. CWinApp and classes derived from it are examples of user-interface threads. Other user-interface threads can also be derived directly from CWinThread.
MSDN中還提供了一些額外的操作全局信息的函數:
AfxGetApp Obtains a pointer to the CWinApp object.
AfxGetInstanceHandle Obtains a handle to the current application instance.
AfxGetResourceHandle Obtains a handle to the application's resources.
AfxGetAppName Obtains a pointer to a string containing the application's name. Alternately, if you have a pointer to the CWinApp object, use m_pszExeName to get the application's name.
看看MFC中的 main()函數:
extern "C" int WINAPI
_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine, int nCmdShow)
#pragma warning(suppress: 4985)
{
// call shared/exported WinMain
return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}