1. 程式人生 > >VC++ 學習筆記系列一CWinApp應用程式類

VC++ 學習筆記系列一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 成員函式。

2執行順序編輯
注意 本文中以粗體顯示的名稱指示由 Microsoft 基礎類庫和 Visual C++ 提供的元素。以 monospaced
型別顯示的名稱指示您建立或重寫的元素。

基於MFC的應用程式有一個 應用物件,它是CWinApp派生類的物件,該物件代表了應用程序的 主執行緒。
當執行緒執行完並退出執行緒時,由於程序中沒有其他執行緒存在,程序自動結束。類CWinApp從CWinThread派
生出來,CWinThread是 使用者介面執行緒的基本類。我們在編寫使用者介面執行緒時,需要從CWinThread派生我
們自己的執行緒類,ClassWizard可以幫助我們完成這個工作。

先用ClassWizard派生一個新的類,設定 基類為CwinThread。注意:類的DECLARE_DYNCREATE和
IMPLEMENT_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的例項初始化,比如建立視窗物件
InitApplication 初始化.
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命令