CWinApp

概述

基本信息

CWinApp為應用程式類
MFC 中的主應用程式類封裝用於 Windows 作業系統的應用程式的初始化、運行和終止。基於框架生成的應用程式必須有且僅有一個從 CWinApp 派生的類的對象。在創建視窗之前先構造該對象。
CWinApp 是從 CWinThread 派生的,後者表示可能具有一個或多個執行緒的應用程式的主執行執行緒。在最新版本的 MFC 中,InitInstance、Run、ExitInstance 和 OnIdle 成員函式實際位於 CWinThread 類中。此處將這些函式作為 CWinApp 成員來探討,因為探討所關心的是對象作為應用程式對象而不是主執行緒的角色。

注意

應用程式類構成應用程式的主執行執行緒。使用 Win32 API 函式還可以創建輔助執行執行緒。這些執行緒可以使用 MFC 庫。有關更多信息,請參見多執行緒編程。
與用於 Windows 作業系統的任何程式一樣,框架應用程式也具有 WinMain 函式。但在框架應用程式中不必編寫 WinMain。它由類庫提供,並在應用程式啟動時調用。WinMain 執行註冊視窗類等標準服務。然後它調用應用程式對象的成員函式來初始化和運行應用程式。(可通過重寫由 WinMain 調用的 CWinApp 成員函式來自定義 WinMain。)
為初始化應用程式,WinMain 調用應用程式對象的 InitApplication 和 InitInstance 成員函式。為運行應用程式的訊息循環,WinMain 調用 Run 成員函式。在終止時,WinMain 調用應用程式對象的 ExitInstance 成員函式。下圖顯示了框架應用程式中的執行順序。

執行順序

注意 本文中以粗體顯示的名稱指示由 Microsoft 基礎類庫和 Visual C++ 提供的元素。以 monospaced 類型顯示的名稱指示您創建或重寫的元素。
基於MFC的應用程式有一個套用對象,它是CWinApp派生類的對象,該對象代表了套用進程的主執行緒。當執行緒執行完並退出執行緒時,由於進程中沒有其他執行緒存在,進程自動結束。類CWinApp從CWinThread派生出來,CWinThread是用戶接口執行緒的基本類。我們在編寫用戶接口執行緒時,需要從CWinThread派生我們自己的執行緒類,ClassWizard可以幫助我們完成這個工作。
先用ClassWizard派生一個新的類,設定基類為CwinThread。注意:類的DECLARE_DYNCREATEIMPLEMENT_DYNCREATE宏是必需的,因為創建執行緒時需要動態創建類的對象。根據需要可將初始化和結束代碼分別放在類的InitInstance和ExitInstance函式中。如果需要創建視窗,則可在InitInstance函式中完成。然後創建執行緒並啟動執行緒。可以用兩種方法來創建用戶接口執行緒,MFC提供了兩個版本的AfxBeginThread函式,其中一個用於創建用戶接口執行緒。第二種方法分為兩步進行:首先,調用執行緒類的構造函式創建一個執行緒對象;其次,調用CWinThread::CreateThread函式來創建該執行緒。執行緒建立並啟動後,線上程函式執行過程中一直有效。如果是執行緒對象,則在對象刪除之前,先結束執行緒。CWinThread已經為我們完成了執行緒結束的工作。

CWinApp類成員

數據成員

m_pszAppName指定了應用程式的名字

m_hInstance標識了應用程式的當前實例
m_hPrevInstance在32位應用程式中被設為NULL
m_lpCmdLine指向一個以null結尾的字元串,指定了應用程式的命令行
m_nCmdShow指定最初如何顯示視窗
m_bHelpMode指明用戶是否處於Help上下文模式(通常用SHIFT+F1激活)
m_pActiveWnd當一個OLE伺服器是現場可激活時,它指向容器應用程式的主視窗
m_pszExeName應用程式的模組名字
m_pszHelpFilePath應用程式的幫助檔案的路徑
m_pszProfileName應用程式的。INI檔案名稱
m_pszRegistryKey用於確定保存應用程式主要設定的完整的註冊表鍵
m_pDocManager用於保存文檔模板管理類的指針(MSDN中沒有這個數據成員)

構造函式

CWinApp 構造一個CWinApp對象

操作符

LoadCursor載入游標資源
LoadStandardCursor載入WINDOWS.H中IDC_常量所指定的Windows預定義游標
LoadOEMCursor載入WINDOWS.H中OCR_常量所指定的WindowsOEM預定義游標
LoadIcon載入圖示資源
LoadStandardIcon載入WINDOWS.H中IDI_常量所指定的Windows預定義圖示
LoadOEMIcon載入WINDOWS.H中OIC_常量所指定的WindowsOEM預定義圖示
RunAutomated檢查應用程式的命令行是否指定/Automation選項。已不用。應當在調用ParseCommandLine之後使用CCommandLineInfo::m_bRunEmbedded中的值
RunEmbedded檢查應用程式的命令行是否指定/Embedding選項。已不用。應當在調用ParseCommandLine之後使用CCommandLineInfo::m_bRunEmbedded中的值
ParseCommandLine解析命令行中的每個參數和標誌
ProcessShellCommand處理命令行參數和標誌
GetProfileInt從應用程式的。INI檔案的一個入口中獲取一個整數
WriteProfileInt將一個整數寫到應用程式的。INI檔案的入口
GetProfileString從應用程式的。INI檔案的一個入口中獲取一個字元串
WriteProfileString將一個字元串寫到應用程式的。INI檔案的入口
AddDocTemplate將一個文檔模板加到應用程式的可用文檔模板列表中
GetFirstDocTemplatePosition獲取第一個文檔模板的位置
GetNextDocTemplate獲得文檔模板的位置。可以遞歸調用
OpenDocumentFile由框架調用,用以從檔案打開一個文檔
AddToRecentFileList將一個檔案名稱加入最近使用(MRU)的檔案列表
SelectPrinter選擇先前由用戶在列印對話框中指定的印表機
CreatePrinterDC創建一個印表機設備環境
GetPrinterDeviceDefaults獲得預設的印表機設備

可重載的函式

InitInstance可被重載以執行Windows的實例初始化,比如創建視窗對象
Run運行預設的訊息循環。可被重載以定製訊息循環
OnIdle可被重載以執行應用程式指定的空閒時處理
ExitInstance可被重載以在應用程式結束時執行清除操作
HideApplication在關閉所有的文檔之前隱藏應用程式
CloseAllDocuments關閉所有打開的文檔
PreTranslateMessage在訊息被分派到Windows函式::TranslateMessage和::DispatchMessage之前過濾訊息
SaveAllModified提示用戶保存所有改變了的文檔
DoMessageBox為應用程式實現AfxMessageBox
ProcessMessageFilter在訊息到達應用程式之前截取特定的訊息
ProcessWndProcException截取應用程式的訊息和命令處理函式拋出的未被處理的異常
DoWaitCursor打開或關閉等待游標
OnDDECommand框架調用這個函式以回響動態數據交換(DDE)執行命令
WinHelp調用Windows的WinHelp函式

初始化

LoadStdProfileSettings載入標準的。INI檔案設定並允許MRU檔案列表特性
SetDialogBkColor設定對話框和訊息框的預設背景顏色
SetRegistryKey使應用程式的設定保存在註冊表中,而不是。INI檔案中
EnableShellOpen允許用戶通過Windows的檔案管理器打開數據檔案
RegisterShellFileTypes在Windows的檔案管理器中註冊所有的應用程式文檔類型
Enable3dControls使控制項具有三維外觀(動態庫)
Enable3dControlsStatic使控制項具有三維外觀(靜態庫)

命令操作

OnFileNew實現ID_FILE_NEW命令
OnFileOpen實現ID_FILE_NEW命令
OnFilePrintSetup實現ID_FILE_PRINT_SETUP命令
OnContextHelp處理應用程式內的SHIFT+F1命令
OnHelp處理應用程式內的F1幫助命令(使用當前的上下文)
OnHelpIndex處理ID_HELP_INDEX命令,提供預設的幫助主題
OnHelpFinder處理ID_HELP_FINDER和ID_DEFAULT_HELP命令
OnHelpUsing處理ID_HELP_USING命令

相關詞條

相關搜尋

熱門詞條

聯絡我們