MFC中的幾個經常使用類——CWinApp

1 概述

1.1 基本信息

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

1.2 注意

應用程序類構成應用程序的主執行線程。使用 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已經爲咱們完成了線程結束的工做。

3 CWinApp類成員

3.1 數據成員

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中沒有這個數據成員)

3.2 構造函數

CWinApp 構造一個CWinApp對象

3.3 操做符

載入光標資源
載入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
得到缺省的打印機設備

3.4 可重載的函數

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

3.5 初始化

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

3.6 命令操做

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命令
相關文章
相關標籤/搜索