複製鏈接
請複製以下鏈接發送給好友

CWinApp

鎖定
是從 CWinThread 派生的,後者表示可能具有一個或多個線程的應用程序的主執行線程。在最新版本的 MFC 中,InitInstance、Run、ExitInstance 和 OnIdle 成員函數實際位於 CWinThread 類中。此處將這些函數作為 CWinApp 成員來探討,因為探討所關心的是對象作為應用程序對象而不是主線程的角色。
中文名
CWinApp
原    型
CWinThread
類    別
應用程序類
作    用
構造一個CWinApp對象

CWinApp基本信息

CWinApp為應用程序
MFC 中的主應用程序類封裝用於 Windows 操作系統的應用程序的初始化、運行和終止。基於框架生成的應用程序必須有且僅有一個從 CWinApp 派生的類的對象。在創建窗口之前先構造該對象。
應用程序類構成應用程序的主執行線程。使用 Win32 API 函數還可以創建輔助執行線程。這些線程可以使用 MFC 庫。有關更多信息,請參見多線程編程。
與用於 Windows 操作系統的任何程序一樣,框架應用程序也具有 WinMain 函數。但在框架應用程序中不必編寫 WinMain。它由類庫提供,並在應用程序啓動時調用。WinMain 執行註冊窗口類等標準服務。然後它調用應用程序對象的成員函數來初始化和運行應用程序。(可通過重寫由 WinMain 調用的 CWinApp 成員函數來自定義 WinMain。)
為初始化應用程序,WinMain 調用應用程序對象的 InitApplication 和 InitInstance 成員函數。為運行應用程序的消息循環,WinMain 調用 Run 成員函數。在終止時,WinMain 調用應用程序對象的 ExitInstance 成員函數。

CWinApp執行順序

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

CWinApp成員

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 構造一個CWinApp對象

CWinApp操作符

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

CWinApp可重載的函數

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

CWinApp初始化

載入標準的 xxx.INI 文件設置並允許MRU文件列表特性
SetDialogBkColor
設置對話框和消息框的缺省背景顏色
使應用程序的設置保存在註冊表中,而不是xxx.INI文件中
允許用户通過Windows的文件管理器打開數據文件
RegisterShellFileTypes
在Windows的文件管理器中註冊所有的應用程序文檔類型
使控件具有三維外觀(動態庫)
Enable3dControlsStatic
使控件具有三維外觀(靜態庫

CWinApp命令操作

OnFileNew
實現ID_FILE_NEW命令
OnFileOpen
實現ID_FILE_OPEN命令
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命令