InitInstance

InitInstance是一個虛函式

基本介紹

  • 中文名:InitInstance
  • 重載虛函式
  • 初始:Dos頭
  • 示例: AppWizard 
  • 返回值:如果初始化成功,則返回非零值
函式格式,返回值,注釋,示例,

函式格式

CWinApp::InitInstance
virtual BOOL InitInstance( );

返回值

如果初始化成功,則返回非零值;否則返回0。
InitInstance函式的返回值BOOL類型,所謂的BOOL(布爾)類型,在C語言中就是int,它實際就是一個宏定義
typedef int BOOL
通常我們使用BOOL類型來決定“是”以及“否”,“是”就是TRUE,“否”就是FALSE。TRUE和FALSE的值就是1和0,它們也是通過宏來直接定義的常量。

注釋

Windows允許在同一時刻運行程式的幾份拷貝。在概念上,應用程式的初始化可以被分為兩個部分:一次性的應用程式初始化工作,這些在應用程式第一次運行時完成,以及實例的初始化工作,每次運行程式的一個拷貝時都會執行這些操作,包括第一次運行時。框架中WinMain實現調用這個函式。
重載InitInstance以初始化在Windows下運行的應用程式的每個新實例。通常,你重載InitInstance以構造主視窗對象並設定CWinThread::m_pMainWnd數據成員,使其指向這個視窗。有關重載這個成員函式的更多信息參見“Visual C++ 程式設計師指南”中的“ CWinApp:應用程式類”。

示例

// AppWizard 根據你選擇的選項實現重載的InitInstance函式。
// 例如,對於下面由AppWizard創建的代碼,選擇了單文檔界面(SDI)選項。
// 你可以在AppWizard創建的代碼中加入其它的每個實例都執行的初始化代碼。
BOOL CMyApp::InitInstance()
{
// 標準的初始化工作
// 如果你沒有使用這些特性,並且希望減小最終可執行程式的大小,
// 你應當從下面的初始化例程中移去不必要的代碼。
SetDialogBkColor(); // 將對話框的背景色設為灰色。
LoadStdProfileSettings(); // 載入標準的INI檔案選項(包括MRU)
// 註冊應用程式的文檔模板。文檔模板
// 被用作文檔、框架視窗和視圖之間的聯繫。
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CMainFrame), // SDI的主框架視窗
RUNTIME_CLASS(CMyView));
AddDocTemplate(pDocTemplate);
// create a new (empty) document
OnFileNew();
if (m_lpCmdLine[0] != '\0')
{
// 創建一個新(空的)文檔
}
return TRUE;
}
學過PE檔案格式,你就明白,程式在進入WinMain之前要做很多事情,比如初始Dos頭,分配函式表,初始化全局變數。之後才進入程式入口(WinMain)
MFC對WindowsAPI進行了封裝。在用嚮導編譯成的二進制代碼,MFC編譯器連結器源檔案編譯成PE檔案格式存儲在磁碟上。程式執行的時候,從PE檔案頭開始執行,在進入Winmain函式之前,進行一系列的必備的初始化。 MFC對這一系列的過程進行了封裝。提供給編程人員的第一個裸露程式入口就是CWinApp的InitInstance(),其實程式的入口依然是WinMain()函式。大家都知道,每個程式都有擁有一個進程,每個進程至少有一個執行緒就是主執行緒CWinThread類是MFC用來封裝執行緒的,這個主執行緒就是在WinMain函式中創建的,包括UI執行緒和工作者執行緒。因此每個MFC程式至少使用一個CWinThread派生類。被MFC程式設計師熟知的CWinApp套用類就從這裡派生。
InitInstance是CWinThread的一個虛函式,InitInstance就是“初始化實例”的意思,可見,它是在實例創建時首先被調用的。應用程式總要重載這個虛函式,進行系統設定,創建運行環境。例如,主視窗一定要在InitInstance()中創建,因為該函式退出後就進入該執行緒的訊息循環
MFC執行流程: _tWinMain(WinMain的別名,用define替換的)->AfxWinMain->初始化執行緒,調用InitInstance初始化視窗,調用Run函式進入訊息循環。

相關詞條

熱門詞條

聯絡我們