共用方式為


CWinApp 類別

Windows 應用程式物件所衍生自的基底類別。

語法

class CWinApp : public CWinThread

成員

公用建構函式

名稱 描述
CWinApp::CWinApp 建構 CWinApp 物件。

公用方法

名稱 描述
CWinApp::AddDocTemplate 將檔案範本新增至應用程式可用的檔案範本清單。
CWinApp::AddToRecentFileList 將檔案名新增至最近使用的 (MRU) 檔案清單。
CWinApp::ApplicationRecoveryCallback 應用程式意外結束時,由架構呼叫。
CWinApp::CloseAllDocuments 關閉所有開啟的檔。
CWinApp::CreatePrinterDC 建立印表機裝置內容。
CWinApp::D elRegTree 刪除指定的索引鍵及其所有子機碼。
CWinApp::D oMessageBox 為應用程式實作 AfxMessageBox
CWinApp::D oWaitCursor 開啟和關閉等候游標。
CWinApp::EnableD2DSupport 啟用應用程式 D2D 支援。 初始化主視窗之前先呼叫這個方法。
CWinApp::EnableHtmlHelp 實作應用程式的 HTMLHelp,而不是 WinHelp。
CWinApp::EnableTaskbarInteraction 啟用任務列互動。
CWinApp::ExitInstance 覆寫以在應用程式終止時清除。
CWinApp::GetApplicationRecoveryParameter 擷取應用程式復原方法的輸入參數。
CWinApp::GetApplicationRecoveryPingInterval 傳回重新啟動管理員等候復原回呼函式傳回的時間長度。
CWinApp::GetApplicationRestartFlags 傳回重新啟動管理員的旗標。
CWinApp::GetAppRegistryKey 傳回 HKEY_CURRENT_USER\“Software”\RegistryKey\ProfileName 的機碼。
CWinApp::GetDataRecoveryHandler 取得應用程式實例的數據復原處理程式。
CWinApp::GetFirstDocTemplatePosition 擷取第一個文件範本的位置。
CWinApp::GetHelpMode 擷取應用程式所使用的說明類型。
CWinApp::GetNextDocTemplate 擷取文件範本的位置。 可以遞歸使用。
CWinApp::GetPrinterDeviceDefaults 擷取印表機裝置預設值。
CWinApp::GetProfileBinary 從應用程式的專案擷取二進位數據。INI 檔案。
CWinApp::GetProfileInt 從應用程式的專案擷取整數。INI 檔案。
CWinApp::GetProfileString 從應用程式的專案擷取字串。INI 檔案。
CWinApp::GetSectionKey 會傳回 HKEY_CURRENT_USER\“Software”\RegistryKey\AppName\lpszSection 的機碼。
CWinApp::HideApplication 關閉所有檔案之前,請先隱藏應用程式。
CWinApp::HtmlHelp HTMLHelp呼叫 Windows 函式。
CWinApp::InitInstance 覆寫以執行 Windows 實例初始化,例如建立窗口物件。
CWinApp::IsTaskbarInteractionEnabled 指出是否啟用 Windows 7 任務列互動。
CWinApp::LoadCursor 載入數據指標資源。
CWinApp::LoadIcon 載入圖示資源。
CWinApp::LoadOEMCursor 載入 windows OEM 預先定義的游標, OCR_ 常數在 WINDOWS.H 中指定。
CWinApp::LoadOEMIcon 載入 windows OEM 預先定義的圖示, OIC_ 常數在 WINDOWS.H 中指定。
CWinApp::LoadStandardCursor 載入 windows 預先定義的數據指標, IDC_ 常數在 WINDOWS.H 中指定。
CWinApp::LoadStandardIcon 載入 windows 預先定義的圖示, IDI_ 常數在 WINDOWS.H 中指定。
CWinApp::OnDDECommand 架構呼叫以回應動態數據交換 (DDE) execute 命令。
CWinApp::OnIdle 覆寫以執行應用程式特定的閑置時間處理。
CWinApp::OpenDocumentFile 由架構呼叫以從檔案開啟檔。
CWinApp::P arseCommandLine 剖析命令列中的個別參數和旗標。
CWinApp::P reTranslateMessage 在訊息分派至 Windows 函式 TranslateMessage 和 DispatchMessage 之前篩選訊息。
CWinApp::P rocessMessageFilter 在到達應用程式之前攔截特定訊息。
CWinApp::P rocessShellCommand 處理命令行自變數和旗標。
CWinApp::P rocessWndProcException 攔截應用程式訊息和命令處理程序擲回的所有未處理的例外狀況。
CWinApp::Register 執行自定義註冊。
CWinApp::RegisterWithRestartManager 向重新啟動管理員註冊應用程式。
CWinApp::ReopenPreviousFilesAtRestart 判斷重新啟動管理員是否會重新開啟應用程式意外結束時開啟的檔案。
CWinApp::RestartInstance 處理由重新啟動管理員起始的應用程式重新啟動。
CWinApp::RestoreAutosavedFilesAtRestart 判斷重新啟動管理員是否會在重新啟動應用程式時還原自動儲存的檔案。
CWinApp::Run 執行預設訊息迴圈。 覆寫 以自定義訊息迴圈。
CWinApp::RunAutomated 針對 /Automation 選項測試應用程式的命令行。 已過時。 請改用 CCommandLineInfo::m_bRunAutomated呼叫 ParseCommandLine 中的值。
CWinApp::RunEmbedded 針對 /Embedding 選項測試應用程式的命令行。 已過時。 請改用 CCommandLineInfo::m_bRunEmbedded呼叫 ParseCommandLine 中的值。
CWinApp::SaveAllModified 提示使用者儲存所有已修改的檔。
CWinApp::SelectPrinter 選取使用者先前透過印表對話框指示的印表機。
CWinApp::SetHelpMode 設定和初始化應用程式所使用的說明類型。
CWinApp::SupportsApplicationRecovery 判斷重新啟動管理員是否會復原非預期結束的應用程式。
CWinApp::SupportsAutosaveAtInterval 判斷重新啟動管理員是否定期自動儲存開啟的檔。
CWinApp::SupportsAutosaveAtRestart 判斷重新啟動管理員是否會在應用程式重新啟動時自動儲存任何開啟的檔。
CWinApp::SupportsRestartManager 判斷應用程式是否支援重新啟動管理員。
CWinApp::Unregister 取消註冊 物件所已知註冊 CWinApp 的所有專案。
CWinApp::WinHelp WinHelp呼叫 Windows 函式。
CWinApp::WriteProfileBinary 將二進位數據寫入應用程式 中的專案。INI 檔案。
CWinApp::WriteProfileInt 將整數寫入應用程式的專案。INI 檔案。
CWinApp::WriteProfileString 將字串寫入應用程式 中的專案。INI 檔案。

受保護的方法

名稱 描述
CWinApp::EnableShellOpen 允許使用者從 Windows 檔案管理員開啟數據檔。
CWinApp::LoadStdProfileSettings 載入標準 。INI 檔案設定,並啟用 MRU 檔案清單功能。
CWinApp::OnContextHelp 處理應用程式中的 SHIFT+F1 說明。
CWinApp::OnFileNew 實作 ID_FILE_NEW 命令。
CWinApp::OnFileOpen 實作 ID_FILE_OPEN 命令。
CWinApp::OnFilePrintSetup 實作 ID_FILE_PRINT_SETUP 命令。
CWinApp::OnHelp 在應用程式 (使用目前的內容) 中處理 F1 說明。
CWinApp::OnHelpFinder 處理ID_HELP_FINDER和ID_DEFAULT_HELP命令。
CWinApp::OnHelpIndex 處理ID_HELP_INDEX命令並提供預設的 [說明] 主題。
CWinApp::OnHelpUsing 處理ID_HELP_USING命令。
CWinApp::RegisterShellFileTypes 向 Windows 檔案管理員註冊所有應用程式的檔案類型。
CWinApp::SetAppID 明確設定應用程式的應用程式使用者模型標識碼。 在向用戶呈現任何使用者介面之前,應該先呼叫這個方法(最好的位置是應用程式建構函式)。
CWinApp::SetRegistryKey 將應用程式設定儲存在登入中,而不是 。INI 檔案。
CWinApp::UnregisterShellFileTypes 使用 Windows 檔案管理員取消註冊所有應用程式的檔案類型。

公用資料成員

名稱 描述
CWinApp::m_bHelpMode 指出使用者是否處於 [說明] 內容模式(通常是使用SHIFT+F1叫用)。
CWinApp::m_eHelpType 指定應用程式所使用的說明類型。
CWinApp::m_hInstance 識別應用程式的目前實例。
CWinApp::m_lpCmdLine 指向指定應用程式命令行的 Null 終止字串。
CWinApp::m_nCmdShow 指定一開始要如何顯示視窗。
CWinApp::m_pActiveWnd 當 OLE 伺服器就地作用中時,容器應用程式主視窗的指標。
CWinApp::m_pszAppID 應用程式使用者模型標識碼。
CWinApp::m_pszAppName 指定應用程式的名稱。
CWinApp::m_pszExeName 應用程式的模組名稱。
CWinApp::m_pszHelpFilePath 應用程式說明檔的路徑。
CWinApp::m_pszProfileName 應用程式的 。INI 檔名。
CWinApp::m_pszRegistryKey 用來判斷用來儲存應用程式設定檔設定的完整登錄機碼。

受保護的資料成員

名稱 描述
CWinApp::m_dwRestartManagerSupportFlags 決定重新啟動管理員行為方式的旗標。
CWinApp::m_nAutosaveInterval 自動儲存之間的時間長度,以毫秒為單位。
CWinApp::m_pDataRecoveryHandler 應用程式的數據復原處理程式指標。

備註

應用程式物件提供成員函式來初始化您的應用程式(及其每個實例),以及執行應用程式。

每個使用 Microsoft Foundation 類別的應用程式只能包含衍生自 CWinApp的一個物件。 當建構其他C++全域物件時,就會建構這個物件,而且當 Windows 呼叫 WinMain 函式時,這個物件是由 Microsoft Foundation Class Library 提供。 在全域層級宣告衍生 CWinApp 的物件。

當您從 CWinApp衍生應用程式類別時,請覆寫 InitInstance 成員函式,以建立應用程式的主視窗物件。

除了 CWinApp 成員函式之外,Microsoft Foundation Class Library 還提供下列全域函式來存取您的 CWinApp 物件和其他全域資訊:

  • AfxGetApp 會取得 物件的指標 CWinApp

  • AfxGetInstanceHandle 取得目前應用程式實例的句柄。

  • AfxGetResourceHandle 取得應用程式資源的句柄。

  • AfxGetAppName 取得包含應用程式名稱之字串的指標。 或者,如果您有 物件的指標 CWinApp ,請使用 m_pszExeName 來取得應用程式的名稱。

如需類別的詳細資訊CWinApp,請參閱 CWinApp:應用程式類別,包括下列概觀:

  • CWinApp應用程式精靈所撰寫的衍生程序代碼。

  • CWinApp應用程式執行順序中的角色。

  • CWinApp的預設成員函式實作。

  • CWinApp的索引鍵可覆寫。

數據 m_hPrevInstance 成員已不存在。 若要判斷應用程式的另一個實例是否正在執行,請使用具名 Mutex。 如果開啟 Mutex 失敗,則沒有任何其他執行的應用程式實例。

繼承階層架構

CObject

CCmdTarget

CWinThread

CWinApp

需求

標題: afxwin.h

CWinApp::AddDocTemplate

呼叫此成員函式,將檔範本新增至應用程式維護的可用檔範本清單。

void AddDocTemplate(CDocTemplate* pTemplate);

參數

pTemplate
要加入之的 CDocTemplate 指標。

備註

呼叫 RegisterShellFileTypes 之前,您應該將所有文件範本新增至應用程式。

範例

// The following code is produced by the Application Wizard when you
// choose the MDI (multiple document interface) option.
CMultiDocTemplate *pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_MYTYPE,
                                     RUNTIME_CLASS(CMyDoc),
                                     RUNTIME_CLASS(CChildFrame), // custom MDI child frame
                                     RUNTIME_CLASS(CMyView));
if (!pDocTemplate)
   return FALSE;
AddDocTemplate(pDocTemplate);

CWinApp::AddToRecentFileList

呼叫此成員函式,將 lpszPathName 新增至 MRU 檔案清單。

virtual void AddToRecentFileList(LPCTSTR lpszPathName);

參數

lpszPathName
檔案的路徑。

備註

您應該呼叫 LoadStdProfileSettings 成員函式,以在使用此成員函式之前載入目前的 MRU 檔案清單。

架構會在開啟檔案或執行另存新檔命令以儲存具有新名稱的檔案時呼叫這個成員函式。

範例

// This adds the pathname c:\temp\test.doc to the top of
// the most recently used (MRU) list in the File menu.
AfxGetApp()->AddToRecentFileList(_T("c:\\temp\\test.doc"));

CWinApp::ApplicationRecoveryCallback

應用程式意外結束時,由架構呼叫。

virtual DWORD ApplicationRecoveryCallback(LPVOID lpvParam);

參數

lpvParam
[in]保留供日後使用。

傳回值

如果此方法成功,則為 0;如果發生錯誤,則為非零。

備註

如果您的應用程式支援重新啟動管理員,當應用程式意外結束時,架構會呼叫此函式。

的預設實 ApplicationRecoveryCallback 作會使用 將 CDataRecoveryHandler 目前開啟的檔案清單儲存至登錄。 這個方法不會自動儲存任何檔案。

若要自定義行為,請在衍生 的 CWinApp 類別 中覆寫此函式,或將您自己的應用程式復原方法當做參數傳遞至 CWinApp::RegisterWithRestartManager

CWinApp::CloseAllDocuments

呼叫此成員函式,在結束之前關閉所有開啟的檔。

void CloseAllDocuments(BOOL bEndSession);

參數

bEndSession
指定是否結束 Windows 工作階段。 如果會話正在結束,則為TRUE;否則為 FALSE。

備註

呼叫 之前先呼叫CloseAllDocumentsHideApplication

CWinApp::CreatePrinterDC

呼叫此成員函式,從選取的印表機建立印表機裝置內容 (DC)。

BOOL CreatePrinterDC(CDC& dc);

參數

dc
印表機裝置內容的參考。

傳回值

如果已成功建立印表機裝置內容,則為非零;否則為 0。

備註

CreatePrinterDC 初始化您以傳址方式傳入的裝置內容,以便使用它來列印。

如果函式成功,當您完成列印時,您必須終結裝置內容。 您可以讓 CDC 物件的解構函式執行它,也可以藉由呼叫 CDC::D eleteDC 明確地執行。

CWinApp::CWinApp

CWinApp建構 物件,並傳遞要儲存為應用程式名稱的 lpszAppName

CWinApp(LPCTSTR lpszAppName = NULL);

參數

lpszAppName
以 Null 結尾的字串,其中包含 Windows 使用的應用程式名稱。 如果未提供這個自變數或為 NULL, CWinApp 請使用資源字串AFX_IDS_APP_TITLE或可執行檔的檔名。

備註

您應該建構衍生類別的 CWinApp一個全域物件。 您的應用程式中只能有一個 CWinApp 物件。 建構函式會儲存物件的指標 CWinAppWinMain 以便呼叫對象的成員函式來初始化和執行應用程式。

CWinApp::D elRegTree

刪除特定登錄機碼及其所有子機碼。

LONG DelRegTree(
    HKEY hParentKey,
    const CString& strKeyName);

LONG DelRegTree(
    HKEY hParentKey,
    const CString& strKeyName,
    CAtlTransactionManager* pTM = NULL);

參數

hParentKey
登錄機碼的句柄。

strKeyName
要刪除的登錄機碼名稱。

pTM
CAtlTransactionManager 物件的指標。

傳回值

如果函式成功,則傳回值會ERROR_SUCCESS。 如果函式失敗,傳回值是 Winerror.h 中定義的非零錯誤碼。

備註

呼叫此函式以刪除指定的索引鍵及其子機碼。

CWinApp::D oMessageBox

架構會呼叫這個成員函式,以實作全域函 式 AfxMessageBox 的消息框。

virtual int DoMessageBox(
    LPCTSTR lpszPrompt,
    UINT nType,
    UINT nIDPrompt);

參數

lpszPrompt
消息框中的文字位址。

nType
消息框 樣式

nIDPrompt
說明內容字串的索引。

傳回值

傳回與 AfxMessageBox相同的值。

備註

請勿呼叫此成員函式來開啟消息框;請改用 AfxMessageBox

覆寫此成員函式,以自定義整個應用程式的呼叫處理 AfxMessageBox

CWinApp::D oWaitCursor

此成員函式是由架構呼叫,以實 作 CWaitCursorCCmdTarget::BeginWaitCursorCCmdTarget::EndWaitCursorCCmdTarget::RestoreWaitCursor

virtual void DoWaitCursor(int nCode);

參數

nCode
如果此參數為 1,則會出現等候游標。 如果為 0,則會還原等候數據指標,而不會遞增參考計數。 如果為 -1,等候數據指標就會結束。

備註

預設值會實作沙漏游標。 DoWaitCursor 會維護參考計數。 當為正數時,會顯示沙漏游標。

雖然您通常不會直接呼叫 DoWaitCursor ,但您可以覆寫此成員函式來變更等候數據指標,或在顯示等候數據指標時執行其他處理。

若要簡化實作等候資料指標的方式,請使用 CWaitCursor

範例

// The following example shows how to display the
// hourglass cursor during some lengthy processing
void CMdiView::OnLButtonDown(UINT nFlags, CPoint point)
{
   UNREFERENCED_PARAMETER(nFlags);
   UNREFERENCED_PARAMETER(point);

   AfxGetApp()->DoWaitCursor(1); // 1->>display the hourglass cursor

   // do some lengthy processing
   Sleep(1000);

   AfxGetApp()->DoWaitCursor(-1); // -1->>remove the hourglass cursor
}

// The next example shows DoWaitCursor with parameter 0. It restores
// the hourglass cursor.
void CMdiView::OnMButtonDown(UINT nFlags, CPoint point)
{
   UNREFERENCED_PARAMETER(nFlags);
   UNREFERENCED_PARAMETER(point);

   AfxGetApp()->DoWaitCursor(1); // display the hourglass cursor

   // do some lengthy processing

   // The message box will normally change the cursor to
   // the standard arrow cursor, and leave the cursor in
   // as the standard arrow cursor when the message box is
   // closed.
   AfxMessageBox(_T("DoWaitCursor Sample"));

   // Call DoWaitCursor with parameter 0 to restore
   // the cursor back to the hourglass cursor.
   AfxGetApp()->DoWaitCursor(0);

   // do some more lengthy processing
   Sleep(1000);

   AfxGetApp()->DoWaitCursor(-1); // remove the hourglass cursor
}

CWinApp::EnableD2DSupport

必須有 Visual Studio 2010 SP1。

啟用應用程式 D2D 支援。 初始化主視窗之前先呼叫這個方法。

BOOL EnableD2DSupport(
    D2D1_FACTORY_TYPE d2dFactoryType = D2D1_FACTORY_TYPE_SINGLE_THREADED,
    DWRITE_FACTORY_TYPE writeFactoryType = DWRITE_FACTORY_TYPE_SHARED);

參數

d2dFactoryType
D2D 處理站的線程模型及其建立的資源。

writeFactoryType
值,指定寫入處理站物件是否會共享或隔離

傳回值

如果已啟用 D2D 支援,則傳回 TRUE-否則傳回 FALSE

CWinApp::EnableHtmlHelp

從衍生類別的 CWinApp建構函式中呼叫此成員函式,以針對應用程式的協助使用 HTMLHelp。

void EnableHtmlHelp();

備註

CWinApp::EnableShellOpen

呼叫此函式,通常是從覆 InitInstance 寫,讓應用程式的使用者在按兩下 Windows 檔案管理員內的檔案時開啟資料檔。

void EnableShellOpen();

備註

RegisterShellFileTypes使用這個函式呼叫成員函式,或提供 。REG 檔案與您的應用程式,以手動註冊檔類型。

範例

// The following code fragment is from CMyApp::InitInstance.
// CMyApp is a CWinApp-derived class.

// enable file manager drag/drop and DDE Execute open
EnableShellOpen();
RegisterShellFileTypes();

CWinApp::EnableTaskbarInteraction

啟用任務列互動。

BOOL EnableTaskbarInteraction(BOOL bEnable = TRUE);

參數

bEnable
指定是否應該啟用與 Windows 7 任務列的互動(TRUE),或停用 #FALSE。

傳回值

如果任務欄互動可以啟用或停用,則傳回 TRUE。

備註

在建立主視窗之前,必須先呼叫這個方法,否則會判斷提示並傳回 FALSE。

CWinApp::ExitInstance

由架構從 Run 成員函式內呼叫,以結束應用程式的這個執行個體。

virtual int ExitInstance();

傳回值

應用程式的結束代碼;0 表示沒有錯誤,且大於 0 的值表示錯誤。 這個值會用來做為 的 WinMain傳回值。

備註

請勿從任何位置呼叫這個成員函式,而是從成員函式內 Run 呼叫。

這個函式的預設實作會將架構選項寫入應用程式的 。INI 檔案。 覆寫此函式,以在應用程式終止時清除。

範例

int CMyApp::ExitInstance()
{
   if (m_pMySampleMem)
      delete m_pMySampleMem;

   DoCleanup();

   return CWinApp::ExitInstance();
}

CWinApp::GetApplicationRecoveryParameter

擷取應用程式復原方法的輸入參數。

virtual LPVOID GetApplicationRecoveryParameter();

傳回值

應用程式復原方法的預設輸入參數。

備註

此函式的預設行為會傳回NULL。

如需詳細資訊,請參閱 CWinApp::ApplicationRecoveryCallback

CWinApp::GetApplicationRecoveryPingInterval

傳回重新啟動管理員等候復原回呼函式傳回的時間長度。

virtual DWORD GetApplicationRecoveryPingInterval();

傳回值

以毫秒為單位的時間長度。

備註

當向重新啟動管理員註冊的應用程式意外結束時,應用程式會嘗試儲存開啟的檔並呼叫復原回呼函式。 默認復原回呼函式為 CWinApp::ApplicationRecoveryCallback

架構等候復原回呼函式傳回的時間長度是 Ping 間隔。 您可以藉由覆寫 CWinApp::GetApplicationRecoveryPingInterval 或提供自定義值給 RegisterWithRestartManager來自定義 Ping 間隔。

CWinApp::GetApplicationRestartFlags

傳回重新啟動管理員的旗標。

virtual DWORD GetApplicationRestartFlags();

傳回值

重新啟動管理員的旗標。 默認實作會傳回 0。

備註

重新啟動管理員的旗標對於預設實作沒有任何作用。 它們會提供以供日後使用。

當您使用 CWinApp::RegisterWithRestartManager 向重新啟動管理員註冊應用程式時,會設定旗標。

重新啟動管理員旗標的可能值如下:

  • RESTART_NO_CRASH

  • RESTART_NO_HANG

  • RESTART_NO_PATCH

  • RESTART_NO_REBOOT

CWinApp::GetAppRegistryKey

傳回 HKEY_CURRENT_USER\“Software”\RegistryKey\ProfileName 的機碼。

HKEY GetAppRegistryKey(CAtlTransactionManager* pTM = NULL);

參數

pTM
指向 CAtlTransactionManager 物件的指標。

傳回值

如果函式成功,則為應用程式密鑰;否則為 NULL。

備註

CWinApp::GetDataRecoveryHandler

取得應用程式實例的數據復原處理程式。

virtual CDataRecoveryHandler *GetDataRecoveryHandler();

傳回值

此應用程式實例的數據復原處理程式。

備註

使用重新啟動管理員的每個應用程式都必須有一個 CDataRecoveryHandler 類別實例。 此類別負責監視開啟的檔和自動儲存檔案。 的行為 CDataRecoveryHandler 取決於重新啟動管理員的設定。 如需詳細資訊,請參閱 CDataRecoveryHandler 類別

這個方法會在 Windows Vista 之前的作業系統上傳回 NULL。 Windows Vista 之前的操作系統不支援重新啟動管理員。

如果應用程式目前沒有數據復原處理程式,這個方法會建立一個,並傳回它的指標。

CWinApp::GetFirstDocTemplatePosition

取得應用程式中第一個檔範本的位置。

POSITION GetFirstDocTemplatePosition() const;

傳回值

可用於反覆專案或對象指標擷取的POSITION值;如果清單是空的,則為NULL。

備註

使用呼叫 GetNextDocTemplate 中傳回的 POSITION 值,以取得第一個 CDocTemplate 物件。

CWinApp::GetHelpMode

擷取應用程式所使用的說明類型。

AFX_HELP_TYPE GetHelpMode();

傳回值

應用程式所使用的說明類型。 如需詳細資訊,請參閱 CWinApp::m_eHelpType

CWinApp::GetNextDocTemplate

取得由 pos 識別的文件範本,然後將 pos 設定為 POSITION 值。

CDocTemplate* GetNextDocTemplate(POSITION& pos) const;

參數

pos
先前呼叫 GetNextDocTemplateGetFirstDocTemplatePosition 所傳回之 POSITION 值的參考。 這個呼叫會將值更新為下一個位置。

傳回值

CDocTemplate 物件的指標

備註

如果您使用 呼叫 GetFirstDocTemplatePosition建立初始位置,則可以GetNextDocTemplate在正向反覆運算循環中使用 。

您必須確定您的 POSITION 值有效。 如果無效,則Microsoft基礎類別庫的偵錯版本判斷提示。

如果擷取的文件範本是最後一個可用的範本,則 pos 的新值會設定為 NULL。

CWinApp::GetPrinterDeviceDefaults

呼叫此成員函式來準備印表機裝置內容以進行列印。

BOOL GetPrinterDeviceDefaults(struct tagPDA* pPrintDlg);

參數

pPrintDlg
PRINTDLG 結構的指標

傳回值

如果成功則為非零;否則為 0。

備註

從 Windows 擷取目前的印表機預設值。視需要 INI 檔案,或使用 [列印安裝] 中使用者所設定的最後一個列印機組態。

範例

void CMyApp::SetLandscapeMode()
{
   PRINTDLG pd;
   pd.lStructSize = (DWORD)sizeof(PRINTDLG);
   BOOL bRet = GetPrinterDeviceDefaults(&pd);
   if (bRet)
   {
      // protect memory handle with ::GlobalLock and ::GlobalUnlock
      DEVMODE FAR *pDevMode = (DEVMODE FAR*)::GlobalLock(pd.hDevMode);
      // set orientation to landscape
      pDevMode->dmOrientation = DMORIENT_LANDSCAPE;
      ::GlobalUnlock(pd.hDevMode);
   }
}

CWinApp::GetProfileBinary

呼叫這個成員函式,從應用程式登錄或 指定區段中的專案擷取二進位數據。INI 檔案。

BOOL GetProfileBinary(
    LPCTSTR lpszSection,
    LPCTSTR lpszEntry,
    LPBYTE* ppData,
    UINT* pBytes);

參數

lpszSection
指向以 null 終止的字串,這個字串指定包含項目的區段。

lpszEntry
指向以 null 終止的字串,其中包含要擷取其值的項目。

ppData
指向將接收數據位址的指標。

pBytes
指向將接收數據大小的UINT(以位元組為單位)。

傳回值

如果成功則為非零;否則為 0。

備註

此成員函式不區分大小寫,因此 lpszSectionlpszEntry 參數中的字串在大小寫時可能會有所不同。

注意

GetProfileBinary 配置緩衝區,並在 * ppData 中傳回其位址。 呼叫端負責使用 delete [] 釋放緩衝區。

重要

這個函式傳回的資料不一定是以 NULL 終止,因此,呼叫端必須執行驗證。 如需詳細資訊,請參閱 Avoiding Buffer Overruns (避免緩衝區滿溢)

範例

CWinApp* pApp = AfxGetApp();

const TCHAR* pszKey = _T("My Section");
struct complex {
  double re, im;
} myData = { 1.4142, -0.5 };

// Write the information to the registry.

pApp->WriteProfileBinary(pszKey, _T("ComplexData"), (LPBYTE)&myData, 
   sizeof(myData));

// Read the information from the registry.

complex* pData;
UINT n;
BOOL ret = pApp->GetProfileBinary(pszKey, _T("ComplexData"), (LPBYTE*)&pData, 
   &n);

ASSERT(ret);
ASSERT(n == sizeof(complex));
ASSERT(myData.re == pData->re);
ASSERT(myData.im == pData->im);
delete [] pData; // free the buffer

如需其他範例,請參閱 CWinApp::WriteProfileBinary

CWinApp::GetProfileInt

呼叫此成員函式,從應用程式登錄檔或 .INI 檔中指定的區段內的項目擷取整數的值。

UINT GetProfileInt(
    LPCTSTR lpszSection,
    LPCTSTR lpszEntry,
    int nDefault);

參數

lpszSection
指向以 null 終止的字串,這個字串指定包含項目的區段。

lpszEntry
指向以 null 終止的字串,其中包含要擷取其值的項目。

nDefault
指定架構找不到項目時要傳回的預設值。

傳回值

如果函式成功,在指定項目後面之字串的整數值。 如果函式找不到專案, 則傳回值是 nDefault 參數的值。 如果對應到指定項目的值不是整數,則傳回值為 0。

此成員函式支援 .INI 檔中值的十六進位標記法。 當您擷取帶正負號的整數時,應該將值 int轉換成 。

備註

此成員函式不區分大小寫,因此 lpszSectionlpszEntry 參數中的字串在大小寫時可能會有所不同。

重要

這個函式傳回的資料不一定是以 NULL 終止,因此,呼叫端必須執行驗證。 如需詳細資訊,請參閱 Avoiding Buffer Overruns (避免緩衝區滿溢)

範例

CWinApp *pApp = AfxGetApp();

const TCHAR *pszKey = _T("My Section");
const TCHAR *pszName = _T("Julian");
int iAge = 26;

// Write the information to the registry.

pApp->WriteProfileString(pszKey, _T("Name"), pszName);
pApp->WriteProfileInt(pszKey, _T("Age"), iAge);

// Read the information from the registry.

CString strName = pApp->GetProfileString(pszKey, _T("Name"));
int iAge2 = pApp->GetProfileInt(pszKey, _T("Age"), 0);

ASSERT(strName == pszName);
ASSERT(iAge2 == iAge);

如需其他範例,請參閱 CWinApp::WriteProfileInt

CWinApp::GetProfileString

呼叫這個成員函式,以擷取與應用程式登錄或 中指定區段中專案相關聯的字串。INI 檔案。

CString GetProfileString(
    LPCTSTR lpszSection,
    LPCTSTR lpszEntry,
    LPCTSTR lpszDefault = NULL);

參數

lpszSection
指向以 null 終止的字串,這個字串指定包含項目的區段。

lpszEntry
指向 Null 終止的字串,其中包含要擷取其字串的專案。 此值不得為 NULL。

lpszDefault
如果初始化檔案中找不到專案,則指向指定項目的預設字串值。

傳回值

傳回值是來自應用程式的字串。如果找不到字串,INI 檔案或 lpszDefault 。 架構支援的字串長度上限為 _MAX_PATH。 如果 lpszDefault 為 NULL,則傳回值為空字串。

備註

重要

這個函式傳回的資料不一定是以 NULL 終止,因此,呼叫端必須執行驗證。 如需詳細資訊,請參閱 Avoiding Buffer Overruns (避免緩衝區滿溢)

範例

CWinApp *pApp = AfxGetApp();

CString strSection = _T("My Section");
CString strStringItem = _T("My String Item");
CString strIntItem = _T("My Int Item");

pApp->WriteProfileString(strSection, strStringItem, _T("test"));

CString strValue;
strValue = pApp->GetProfileString(strSection, strStringItem);
ASSERT(strValue == _T("test"));

pApp->WriteProfileInt(strSection, strIntItem, 1234);

int nValue;
nValue = pApp->GetProfileInt(strSection, strIntItem, 0);
ASSERT(nValue == 1234);

如需另一個範例,請參閱 CWinApp::GetProfileInt 的範例

CWinApp::GetSectionKey

傳回 HKEY_CURRENT_USER\“Software”\RegistryKey\AppName\lpszSection 的機碼。

HKEY GetSectionKey(
    LPCTSTR lpszSection,
    CAtlTransactionManager* pTM = NULL);

參數

lpszSection
要取得之金鑰的名稱。

pTM
指向 CAtlTransactionManager 物件的指標。

傳回值

如果函式成功,則為區段索引鍵;否則為 NULL。

備註

CWinApp::HideApplication

呼叫此成員函式,在關閉開啟的檔之前隱藏應用程式。

void HideApplication();

CWinApp::HtmlHelp

呼叫此成員函式以叫用 HTMLHelp 應用程式。

virtual void HtmlHelp(
    DWORD_PTR dwData,
    UINT nCmd = 0x000F);

參數

dwData
指定其他數據。 所使用的值取決於 nCmd 參數的值0x000F默認值,表示HH_HELP_CONTEXT

nCmd
指定要求的說明類型。 如需可能值的清單及其如何影響 dwData 參數,請參閱 Windows SDK 中 HtmlHelpWHtmlHelpA API 函式中所述的 uCommand 參數。

備註

架構也會呼叫此函式來叫用 HTMLHelp 應用程式。

架構會在您的應用程式終止時自動關閉 HTMLHelp 應用程式。

CWinApp::InitInstance

Windows 允許相同程式的數個複本同時執行。

virtual BOOL InitInstance();

傳回值

如果初始化成功,則為非零;否則為 0。

備註

應用程式初始化在概念上分為兩個區段:第一次執行程式時執行的一次性應用程式初始化,以及每次執行程序複本的實例初始化,包括第一次執行。 架構的 實作 WinMain 會呼叫此函式。

覆寫 InitInstance 以初始化在 Windows 下執行之應用程式的每個新實例。 一般而言,您可以覆寫 InitInstance 來建構主窗口物件,並將數據成員設定 CWinThread::m_pMainWnd 為指向該視窗。 如需覆寫此成員函式的詳細資訊,請參閱 CWinApp:應用程式類別

注意

MFC 應用程式必須初始化為單個線程 Apartment (STA)。 如果您在覆寫中InitInstance呼叫 CoInitializeEx,請指定 COINIT_APARTMENTTHREADED (而不是COINIT_MULTITHREADED)。

範例

// AppWizard implements the InitInstance overridable function 
// according to options you select.  For example, the multiple document
// interface (MDI) option was chosen for the AppWizard code created
// below. You can add other per-instance initializations to the code
// created by AppWizard.

BOOL CMFCListViewApp::InitInstance()
{
   AfxSetAmbientActCtx(FALSE);
   // Remainder of function definition omitted.

   CWinApp::InitInstance();

   // Initialize OLE libraries
   if (!AfxOleInit())
   {
      AfxMessageBox(_T("OleInit failed."));
      return FALSE;
   }

   // Standard initialization
   // If you are not using these features and wish to reduce the size
   // of your final executable, you should remove from the following
   // the specific initialization routines you do not need
   // Change the registry key under which our settings are stored
   // TODO: You should modify this string to be something appropriate
   // such as the name of your company or organization
   SetRegistryKey(_T("Local AppWizard-Generated Applications"));
   LoadStdProfileSettings(4);  // Load standard INI file options (including MRU)
   // Register the application's document templates.  Document templates
   //  serve as the connection between documents, frame windows and views
   CMultiDocTemplate* pDocTemplate;
   pDocTemplate = new CMultiDocTemplate(IDR_MFCListViewTYPE,
      RUNTIME_CLASS(CMFCListViewDoc),
      RUNTIME_CLASS(CChildFrame), // custom MDI child frame
      RUNTIME_CLASS(CMyListView));
   if (!pDocTemplate)
      return FALSE;
   AddDocTemplate(pDocTemplate);

   // create main MDI Frame window
   CMainFrame* pMainFrame = new CMainFrame;
   if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
   {
      delete pMainFrame;
      return FALSE;
   }
   m_pMainWnd = pMainFrame;
   // call DragAcceptFiles only if there's a suffix
   //  In an MDI app, this should occur immediately after setting m_pMainWnd


   // Parse command line for standard shell commands, DDE, file open
   CCommandLineInfo cmdInfo;
   ParseCommandLine(cmdInfo);


   // Dispatch commands specified on the command line.  Will return FALSE if
   // app was launched with /RegServer, /Register, /Unregserver or /Unregister.
   if (!ProcessShellCommand(cmdInfo))
      return FALSE;
   // The main window has been initialized, so show and update it
   pMainFrame->ShowWindow(m_nCmdShow);
   pMainFrame->UpdateWindow();

   return TRUE;
}

CWinApp::IsTaskbarInteractionEnabled

指出是否啟用 Windows 7 任務列互動。

virtual BOOL IsTaskbarInteractionEnabled();

傳回值

如果 EnableTaskbarInteraction 已呼叫 且操作系統為 Windows 7 或更新版本,則傳回 TRUE。

備註

任務列互動表示 MDI 應用程式會在滑鼠指標位於應用程式任務列按鈕上方時,以個別索引卷標式縮圖顯示 MDI 子系的內容。

CWinApp::LoadCursor

從目前的可執行檔載入由 lpszResourceName 命名的數據指標資源,或由 nIDResource 所指定

HCURSOR LoadCursor(LPCTSTR lpszResourceName) const;  HCURSOR LoadCursor(UINT nIDResource) const;

參數

lpszResourceName
指向包含數據指標資源名稱的 Null 終止字串。 您可以針對這個自變數使用 CString

nIDResource
數據指標資源的標識碼。 如需資源清單,請參閱 Windows SDK 中的 LoadCursor

傳回值

如果成功,則為游標的句柄;否則為 NULL。

備註

LoadCursor 只有在先前尚未載入數據指標時,才會將游標載入記憶體中;否則,它會擷取現有資源的句柄。

使用LoadStandardCursorLoadOEMCursor成員函式來存取預先定義的 Windows 資料指標。

範例

HCURSOR hCursor;

// Load a cursor resource that was originally created using
// the Graphics Editor and assigned the i.d. IDC_MYCURSOR.
hCursor = AfxGetApp()->LoadCursor(IDC_MYCURSOR);

CWinApp::LoadIcon

從可執行檔載入由 lpszResourceName 命名的 圖示資源,或由 nIDResource 所指定。

HICON LoadIcon(LPCTSTR lpszResourceName) const;  HICON LoadIcon(UINT nIDResource) const;

參數

lpszResourceName
指向包含圖示資源名稱的 Null 終止字串。 您也可以針對這個自變數使用 CString

nIDResource
圖示資源的標識碼。

傳回值

如果成功,則為圖示的句柄;否則為 NULL。

備註

LoadIcon 只有在先前尚未載入圖示時,才會載入圖示;否則,它會擷取現有資源的句柄。

您可以使用 LoadStandardIconLoadOEMIcon 成員函式來存取預先定義的 Windows 圖示。

注意

這個成員函式會呼叫 Win32 API 函 式 LoadIcon,它只能載入大小符合SM_CXICON和SM_CYICON系統計量值的圖示。

CWinApp::LoadOEMCursor

載入 nIDCursor指定的 Windows 預先定義資料指標資源。

HCURSOR LoadOEMCursor(UINT nIDCursor) const;

參數

nIDCursor
指定 預先定義 Windows 資料指標的OCR_ 指令清單常數識別碼。 您必須先擁有 #define OEMRESOURCE 才能 #include \<afxwin.h> 存取 WINDOWS.H 中的OCR_ 常數。

傳回值

如果成功,則為游標的句柄;否則為 NULL。

備註

LoadOEMCursor使用 或 LoadStandardCursor 成員函式來存取預先定義的 Windows 數據指標。

範例

// In the stdafx.h file, add #define OEMRESOURCE to
// include the windows.h definitions of OCR_ values.
#define OEMRESOURCE
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions

 

HCURSOR hCursor;
// Load the predefined WIndows "size all" cursor.
hCursor = AfxGetApp()->LoadOEMCursor(OCR_SIZEALL);

CWinApp::LoadOEMIcon

載入 nIDIcon指定的 Windows 預先定義圖示資源。

HICON LoadOEMIcon(UINT nIDIcon) const;

參數

nIDIcon
指定 預先定義 Windows 圖示的OIC_ 指令清單常數識別碼。 您必須先擁有 #define OEMRESOURCE 才能 #include \<afxwin.h> 存取 WINDOWS.H 中的OIC_ 常數。

傳回值

如果成功,則為圖示的句柄;否則為 NULL。

備註

LoadOEMIcon使用 或 LoadStandardIcon 成員函式來存取預先定義的 Windows 圖示。

CWinApp::LoadStandardCursor

載入 lpszCursorName 指定的 Windows 預先定義資料指標資源

HCURSOR LoadStandardCursor(LPCTSTR lpszCursorName) const;

參數

lpszCursorName
指定 預先定義 Windows 資料指標的 IDC_指令清單常數識別碼。 這些標識碼定義於 WINDOWS.H 中。 下列清單顯示 lpszCursorName 的可能預先定義值和意義

  • IDC_ARROW標準箭頭游標

  • IDC_IBEAM標準文字插入數據指標

  • IDC_WAIT Windows 執行耗時的工作時使用的沙漏游標

  • 用於選取的IDC_CROSS橫發游標

  • IDC_UPARROW箭號,指向直立

  • IDC_SIZE過時且不受支援;use IDC_SIZEALL

  • IDC_SIZEALL一個四指箭號。 用來調整視窗大小的數據指標。

  • IDC_ICON過時且不受支援。 使用 IDC_ARROW。

  • IDC_SIZENWSE左上方和右下兩端的雙向箭號

  • IDC_SIZENESW右上方和左下端的雙頭箭號

  • IDC_SIZEWE水準雙向箭號

  • IDC_SIZENS垂直雙頭箭號

傳回值

如果成功,則為游標的句柄;否則為 NULL。

備註

LoadStandardCursor使用 或 LoadOEMCursor 成員函式來存取預先定義的 Windows 數據指標。

範例

HCURSOR hCursor;

// Load the predefined Windows "up arrow" cursor.
hCursor = AfxGetApp()->LoadStandardCursor(IDC_UPARROW);

CWinApp::LoadStandardIcon

載入 lpszIconName 指定的 Windows 預先定義圖示資源

HICON LoadStandardIcon(LPCTSTR lpszIconName) const;

參數

lpszIconName
指定預先定義 Windows 圖示的指令清單常數識別碼。 這些標識碼定義於 WINDOWS.H 中。 如需可能預先定義值及其描述的清單,請參閱 Windows SDK 中 LoadIcon 中的 lpIconName 參數。

傳回值

如果成功,則為圖示的句柄;否則為 NULL。

備註

LoadStandardIcon使用 或 LoadOEMIcon 成員函式來存取預先定義的 Windows 圖示。

CWinApp::LoadStdProfileSettings

從 InitInstance 成員函式內呼叫此成員函式,以啟用和載入最近使用的檔案清單和最後一個預覽狀態。

void LoadStdProfileSettings(UINT nMaxMRU = _AFX_MRU_COUNT);

參數

nMaxMRU
最近用來追蹤的檔案數目。

備註

如果 nMaxMRU 為 0,將不會維護任何 MRU 清單。

CWinApp::m_bHelpMode

如果應用程式處於說明內容模式,則為TRUE(傳統上以SHIFT + F1 叫用):否則為 FALSE。

BOOL m_bHelpMode;

備註

在 [說明內容] 模式中,游標會變成問號,用戶可以在畫面上移動。 如果您想要在 [說明] 模式中實作特殊處理,請檢查此旗標。 m_bHelpMode 是 BOOL 類型的公用變數。

CWinApp::m_dwRestartManagerSupportFlags

決定重新啟動管理員行為方式的旗標。

DWORD m_dwRestartManagerSupportFlags;

備註

若要啟用重新啟動管理員,請將 設定 m_dwRestartManagerSupportFlags 為您想要的行為。 下表顯示可用的旗標。

旗標 描述
AFX_RESTART_MANAGER_SUPPORT_RESTART 應用程式是使用 CWinApp::RegisterWithRestartManager 註冊。 如果應用程式意外結束,重新啟動管理員會負責重新啟動應用程式。
- AFX_RESTART_MANAGER_SUPPORT_RECOVERY 應用程式會向重新啟動管理員註冊,而重新啟動管理員會在重新啟動應用程式時呼叫復原回呼函式。 默認復原回呼函式為 CWinApp::ApplicationRecoveryCallback
- AFX_RESTART_MANAGER_AUTOSAVE_AT_RESTART 自動儲存已啟用,且重新啟動管理員會在應用程式重新啟動時自動儲存任何開啟的檔。
- AFX_RESTART_MANAGER_AUTOSAVE_AT_INTERVAL 自動儲存已啟用,而重新啟動管理員會定期自動儲存任何開啟的檔。 間隔是由 CWinApp::m_nAutosaveInterval 所定義。
- AFX_RESTART_MANAGER_REOPEN_PREVIOUS_FILES 重新啟動管理員會在從非預期的結束重新啟動應用程式之後,開啟先前開啟的檔。 CDataRecoveryHandler 類別會處理儲存開啟的文件清單並還原檔。
- AFX_RESTART_MANAGER_RESTORE_AUTOSAVED_FILES 重新啟動管理員會在重新啟動應用程式之後,提示使用者還原自動儲存的檔案。 類別會 CDataRecoveryHandler 查詢使用者。
- AFX_RESTART_MANAGER_SUPPORT_NO_AUTOSAVE AFX_RESTART_MANAGER_SUPPORT_RESTART、AFX_RESTART_MANAGER_SUPPORT_RECOVER和AFX_RESTART_MANAGER_REOPEN_PREVIOUS_FILES的聯集。
- AFX_RESTART_MANAGER_SUPPORT_ALL_ASPECTS AFX_RESTART_MANAGER_SUPPORT_NO_AUTOSAVE、AFX_RESTART_MANAGER_AUTOSAVE_AT_RESTART、AFX_RESTART_MANAGER_AUTOSAVE_AT_INTERVAL和AFX_RESTART_MANAGER_RESTORE_AUTOSAVED_FILES的聯集。
- AFX_RESTART_MANAGER_SUPPORT_RESTART_ASPECTS AFX_RESTART_MANAGER_SUPPORT_RESTART、AFX_RESTART_MANAGER_AUTOSAVE_AT_RESTART、AFX_RESTART_MANAGER_REOPEN_PREVIOUS_FILES和AFX_RESTART_MANAGER_RESTORE_AUTOSAVED_FILES的聯集。
- AFX_RESTART_MANAGER_SUPPORT_RECOVERY_ASPECTS 聯集ofAFX_RESTART_MANAGER_SUPPORT_RECOVERY、AFX_RESTART_MANAGER_AUTOSAVE_AT_INTERVAL、AFX_RESTART_MANAGER_REOPEN_PREVIOUS_FILES和AFX_RESTART_MANAGER_RESTORE_AUTOSAVED_FILES。

CWinApp::m_eHelpType

這個數據成員的類型是列舉型別AFX_HELP_TYPE,定義於 CWinApp 類別內。

AFX_HELP_TYPE m_eHelpType;

備註

AFX_HELP_TYPE列舉的定義如下:

enum AFX_HELP_TYPE {
    afxWinHelp = 0,
    afxHTMLHelp = 1
    };
  • 若要將應用程式的協助設定為 HTML 說明,請呼叫 SetHelpMode 並指定 afxHTMLHelp

  • 若要將應用程式的協助設定為 WinHelp,請呼叫 SetHelpMode 並指定 afxWinHelp

CWinApp::m_hInstance

對應至 Windows 傳遞至 WinMain的 hInstance 參數。

HINSTANCE m_hInstance;

備註

數據 m_hInstance 成員是目前在 Windows 下執行之應用程式實例的句柄。 全域函式 AfxGetInstanceHandle 會傳回此專案。 m_hInstance 是 HINSTANCE 類型的公用變數。

範例

// Typically you do not need to pass the application's hInstance
// to Windows APIs directly because there are equivalent MFC
// member functions that pass the hInstance for you.  The following
// example is not typical:

HCURSOR hCursor;
hCursor = ::LoadCursor(AfxGetApp()->m_hInstance, 
   MAKEINTRESOURCE(IDC_MYCURSOR));

// A more direct way to get the application's hInstance is to
// call AfxGetInstanceHandle:
hCursor = ::LoadCursor(AfxGetInstanceHandle(), 
   MAKEINTRESOURCE(IDC_MYCURSOR));

// If you need the hInstance to load a resource, it is better
// to call AfxGetResourceHandle instead of AfxGetInstanceHandle:
hCursor = ::LoadCursor(AfxGetResourceHandle(), 
   MAKEINTRESOURCE(IDC_MYCURSOR));

// A better way to load the cursor resource is to call
// CWinApp::LoadCursor
hCursor = AfxGetApp()->LoadCursor(IDC_MYCURSOR);

CWinApp::m_lpCmdLine

對應至 Windows 傳遞至 WinMain的 lpCmdLine 參數。

LPTSTR m_lpCmdLine;

備註

指向指定應用程式命令行的 Null 終止字串。 用來 m_lpCmdLine 存取使用者啟動應用程式時所輸入的任何命令行自變數。 m_lpCmdLine 是 LPTSTR 類型的公用變數。

範例

if (m_lpCmdLine[0] == _T('\0'))
{
   // Create a new (empty) document.
   OnFileNew();
}
else
{
   // Open a file passed as the first command line parameter.
   OpenDocumentFile(m_lpCmdLine);
}

CWinApp::m_nAutosaveInterval

自動儲存之間的時間長度,以毫秒為單位。

int m_nAutosaveInterval;

備註

您可以設定重新啟動管理員,以設定間隔自動儲存開啟的檔。 如果您的應用程式未自動儲存盤案,此參數就不會有任何作用。

CWinApp::m_nCmdShow

對應至 Windows 傳遞至 WinMain的 nCmdShow 參數。

int m_nCmdShow;

備註

當您呼叫 CWnd::ShowWindow 作為應用程式主視窗時,應該以自變數的形式傳遞m_nCmdShowm_nCmdShow 是類型的 int公用變數。

範例

// The following code fragment is taken from CMyApp::InitInstance.
// CMyApp is derived from CWinApp.

// The main window has been initialized, so show and update it
// using the nCmdShow parameter passed to the application when it
// was first launched.
// pMainFrame is the main MDI frame window of our app and is derived
// from CMDIFrameWnd.
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();

CWinApp::m_pActiveWnd

使用此資料成員來儲存已啟動 OLE 伺服器應用程式之 OLE 容器應用程式主視窗的指標。

備註

如果此資料成員為 NULL,則應用程式不是就地作用中。

架構會在 OLE 容器應用程式就地啟動框架視窗時,設定此成員變數。

CWinApp::m_pDataRecoveryHandler

應用程式的數據復原處理程式指標。

CDataRecoveryHandler* m_pDataRecoveryHandler;

備註

應用程式的數據復原處理程式會監視開啟的檔,並自動儲存檔。 架構會使用資料復原處理程式,在應用程式意外結束時重新啟動時還原自動儲存的檔案。 如需詳細資訊,請參閱 CDataRecoveryHandler 類別

CWinApp::m_pszAppName

指定應用程式的名稱。

LPCTSTR m_pszAppName;

備註

應用程式名稱可能來自傳遞至 CWinApp 建構函式的參數,或如果未指定,則為具有標識符的資源字串AFX_IDS_APP_TITLE。 如果資源中找不到應用程式名稱,則它來自程式的.EXE檔名。

由全域函式 AfxGetAppName 傳回。 m_pszAppName是 const char* 類型的公用變數。

注意

如果您將值指派給 m_pszAppName,則必須在堆積上動態配置該值。 解 CWinApp 構函式會使用這個指標呼叫 free( 。 您許多人想要使用 _tcsdup( ) 執行時間連結函式來執行設定。 此外,請先釋放與目前指標相關聯的記憶體,再指派新的值。 例如:

//First free the string allocated by MFC at CWinApp startup.
//The string is allocated before InitInstance is called.
free((void*)m_pszAppName);
//Change the name of the application file.
//The CWinApp destructor will free the memory.
m_pszAppName = _tcsdup(_T("c:\\somedir\\myapp.exe"));

範例

CWnd *pWnd = AfxGetMainWnd();
// Set pWnd to some CWnd object whose window has already
// been created.

// The following call to CWnd::MessageBox uses the application
// title as the message box caption.
pWnd->MessageBox(_T("Some message"), AfxGetApp()->m_pszAppName);

// A more direct way to get the application title is to
// call AfxGetAppName:
pWnd->MessageBox(_T("Some message"), AfxGetAppName());

// An easier way to display a message box using the application
// title as the message box caption is to call AfxMessageBox:
AfxMessageBox(_T("Some message"));

CWinApp::m_pszExeName

包含沒有擴展名的應用程式可執行檔名稱。

LPCTSTR m_pszExeName;

備註

不同於 m_pszAppName,此名稱不能包含空白。 m_pszExeName是 const char* 類型的公用變數。

注意

如果您將值指派給 m_pszExeName,則必須在堆積上動態配置該值。 解 CWinApp 構函式會使用這個指標呼叫 free( 。 您許多人想要使用 _tcsdup( ) 執行時間連結函式來執行設定。 此外,請先釋放與目前指標相關聯的記憶體,再指派新的值。 例如:

//First free the string allocated by MFC at CWinApp startup.
//The string is allocated before InitInstance is called.
free((void*)m_pszExeName);
//Change the name of the .EXE file.
//The CWinApp destructor will free the memory.
m_pszExeName = _tcsdup(_T("c:\\somedir\\myapp"));

CWinApp::m_pszHelpFilePath

包含應用程式說明檔的路徑。

LPCTSTR m_pszHelpFilePath;

備註

根據預設,架構會 m_pszHelpFilePath 使用 「,初始化為應用程式的名稱。已附加 HLP」。 若要變更說明檔的名稱,請將 設定 m_pszHelpFilePath 為指向包含所需說明檔完整名稱的字串。 執行這項操作的便利位置是在應用程式的 InitInstance 函式中。 m_pszHelpFilePath是 const char* 類型的公用變數。

注意

如果您將值指派給 m_pszHelpFilePath,則必須在堆積上動態配置該值。 解 CWinApp 構函式會使用這個指標呼叫 free( 。 您許多人想要使用 _tcsdup( ) 執行時間連結函式來執行設定。 此外,請先釋放與目前指標相關聯的記憶體,再指派新的值。 例如:

//First free the string allocated by MFC at CWinApp startup.
//The string is allocated before InitInstance is called.
free((void*)m_pszHelpFilePath);
//Change the name of the .HLP file.
//The CWinApp destructor will free the memory.
m_pszHelpFilePath = _tcsdup(_T("c:\\somedir\\myhelp.hlp"));

CWinApp::m_pszProfileName

包含應用程式的名稱。INI 檔案。

LPCTSTR m_pszProfileName;

備註

m_pszProfileName是 const char* 類型的公用變數。

注意

如果您將值指派給 m_pszProfileName,則必須在堆積上動態配置該值。 解 CWinApp 構函式會使用這個指標呼叫 free( 。 您許多人想要使用 _tcsdup( ) 執行時間連結函式來執行設定。 此外,請先釋放與目前指標相關聯的記憶體,再指派新的值。 例如:

//First free the string allocated by MFC at CWinApp startup.
//The string is allocated before InitInstance is called.
free((void*)m_pszProfileName);
//Change the name of the .INI file.
//The CWinApp destructor will free the memory.
m_pszProfileName = _tcsdup(_T("c:\\somedir\\myini.ini"));

CWinApp::m_pszRegistryKey

用來判斷在登錄或 INI 檔案中儲存應用程式設定檔設定的位置。

LPCTSTR m_pszRegistryKey;

備註

一般而言,此數據成員會被視為唯讀。

  • 值會儲存至登錄機碼。 應用程式配置檔設定的名稱會附加至下列登錄機碼:HKEY_CURRENT_USER/Software/LocalAppWizard-Generated/。

如果您將值指派給 m_pszRegistryKey,則必須在堆積上動態配置該值。 解 CWinApp 構函式會使用這個指標呼叫 free( 。 您許多人想要使用 _tcsdup( ) 執行時間連結函式來執行設定。 此外,請先釋放與目前指標相關聯的記憶體,再指派新的值。 例如:

//First free the string allocated by MFC at CWinApp startup.
//The string is allocated before InitInstance is called.
free((void*)m_pszRegistryKey);
//Change the name of the registry key.
//The CWinApp destructor will free the memory.
m_pszRegistryKey = _tcsdup(
    _T("HKEY_CURRENT_USER\\Software\\mycompany\\myapp\\thissection\\thisvalue"));

CWinApp::m_pszAppID

應用程式使用者模型標識碼。

LPCTSTR m_pszAppID;

備註

CWinApp::OnContextHelp

處理應用程式中的 SHIFT+F1 說明。

afx_msg void OnContextHelp();

備註

您必須將語句新增 ON_COMMAND( ID_CONTEXT_HELP, OnContextHelp ) 至類別 CWinApp 訊息對應,同時新增快捷鍵數據表專案,通常是SHIFT+F1,才能啟用此成員函式。

OnContextHelp 讓應用程式進入 [說明] 模式。 游標會變更為箭號和問號,然後使用者可以移動滑鼠指標,然後按滑鼠左鍵來選取對話框、視窗、功能表或命令按鈕。 這個成員函式會擷取游標下物件的 Help 內容,並使用該說明內容呼叫 Windows 函式 WinHelp。

CWinApp::OnDDECommand

當主框架視窗收到 DDE 執行訊息時,由架構呼叫。

virtual BOOL OnDDECommand(LPTSTR lpszCommand);

參數

lpszCommand
指向應用程式收到的 DDE 命令字串。

傳回值

如果已處理命令,則為非零;否則為 0。

備註

默認實作會檢查命令是否為開啟檔的要求,如果是,則會開啟指定的檔。 當使用者按兩下資料檔時,Windows 檔案管理員通常會傳送這類 DDE 命令字串。 覆寫此函式以處理其他 DDE 執行命令,例如要列印的命令。

範例

BOOL CMyApp::OnDDECommand(LPTSTR lpszCommand)
{
   if (CWinApp::OnDDECommand(lpszCommand))
      return TRUE;

   // Handle any DDE commands recognized by your application
   // and return TRUE.  See implementation of CWinApp::OnDDEComand
   // for example of parsing the DDE command string.

   // Return FALSE for any DDE commands you do not handle.
   return FALSE;
}

CWinApp::OnFileNew

實作 ID_FILE_NEW 命令。

afx_msg void OnFileNew();

備註

您必須將語句新增 ON_COMMAND( ID_FILE_NEW, OnFileNew ) 至類別 CWinApp 訊息對應,才能啟用此成員函式。 如果啟用,此函式會處理 File New 命令的執行。

如需如何覆寫此成員函式的預設行為和指引的資訊,請參閱 Technical Note 22

範例

// The following message map, produced by the Application Wizard, binds
// the File New, Open, and Print Setup menu commands to default
// framework implementations of these commands.
BEGIN_MESSAGE_MAP(CStdApp, CWinApp)
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()

 

// The following message map illustrates how to rebind the
// File New, Open and Print Setup menu commands to handlers that
// you implement in your CWinApp-derived class.
// Note, you can name the handler CCustomApp::OnFileNew instead of
// CCustomApp::OnMyFileNew, and likewise for the other handlers, if desired.
BEGIN_MESSAGE_MAP(CCustomApp, CWinApp)
ON_COMMAND(ID_FILE_NEW, &CCustomApp::OnMyFileNew)
ON_COMMAND(ID_FILE_OPEN, &CCustomApp::OnMyFileOpen)
ON_COMMAND(ID_FILE_PRINT_SETUP, &CCustomApp::OnMyFilePrintSetup)
END_MESSAGE_MAP()

CWinApp::OnFileOpen

實作 ID_FILE_OPEN 命令。

afx_msg void OnFileOpen();

備註

您必須將語句新增 ON_COMMAND( ID_FILE_OPEN, OnFileOpen ) 至類別 CWinApp 訊息對應,才能啟用此成員函式。 如果啟用,此函式會處理檔案開啟命令的執行。

如需如何覆寫此成員函式之預設行為和指引的資訊,請參閱 技術附註 22

範例

// The following message map, produced by the Application Wizard, binds
// the File New, Open, and Print Setup menu commands to default
// framework implementations of these commands.
BEGIN_MESSAGE_MAP(CStdApp, CWinApp)
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()

 

// The following message map illustrates how to rebind the
// File New, Open and Print Setup menu commands to handlers that
// you implement in your CWinApp-derived class.
// Note, you can name the handler CCustomApp::OnFileNew instead of
// CCustomApp::OnMyFileNew, and likewise for the other handlers, if desired.
BEGIN_MESSAGE_MAP(CCustomApp, CWinApp)
ON_COMMAND(ID_FILE_NEW, &CCustomApp::OnMyFileNew)
ON_COMMAND(ID_FILE_OPEN, &CCustomApp::OnMyFileOpen)
ON_COMMAND(ID_FILE_PRINT_SETUP, &CCustomApp::OnMyFilePrintSetup)
END_MESSAGE_MAP()

CWinApp::OnFilePrintSetup

實作 ID_FILE_PRINT_SETUP 命令。

afx_msg void OnFilePrintSetup();

備註

您必須將語句新增 ON_COMMAND( ID_FILE_PRINT_SETUP, OnFilePrintSetup ) 至類別 CWinApp 訊息對應,才能啟用此成員函式。 如果已啟用,此函式會處理檔案列印命令的執行。

如需如何覆寫此成員函式之預設行為和指引的資訊,請參閱 技術附註 22

範例

// The following message map, produced by the Application Wizard, binds
// the File New, Open, and Print Setup menu commands to default
// framework implementations of these commands.
BEGIN_MESSAGE_MAP(CStdApp, CWinApp)
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()

 

// The following message map illustrates how to rebind the
// File New, Open and Print Setup menu commands to handlers that
// you implement in your CWinApp-derived class.
// Note, you can name the handler CCustomApp::OnFileNew instead of
// CCustomApp::OnMyFileNew, and likewise for the other handlers, if desired.
BEGIN_MESSAGE_MAP(CCustomApp, CWinApp)
ON_COMMAND(ID_FILE_NEW, &CCustomApp::OnMyFileNew)
ON_COMMAND(ID_FILE_OPEN, &CCustomApp::OnMyFileOpen)
ON_COMMAND(ID_FILE_PRINT_SETUP, &CCustomApp::OnMyFilePrintSetup)
END_MESSAGE_MAP()

CWinApp::OnHelp

在應用程式 (使用目前的內容) 中處理 F1 說明。

afx_msg void OnHelp();

備註

通常,您也會新增 F1 鍵的快速鍵專案。 啟用 F1 金鑰只是慣例,而不是需求。

您必須將語句新增 ON_COMMAND( ID_HELP, OnHelp ) 至類別 CWinApp 訊息對應,才能啟用此成員函式。 如果啟用,當使用者按下 F1 鍵時,由架構呼叫。

這個訊息處理程式函式的預設實作會決定對應至目前視窗、對話框或功能表項的 [說明] 內容,然後呼叫 WINHELP.EXE。 如果目前沒有可用的內容,函式會使用預設內容。

覆寫此成員函式,將 [說明] 內容設定為目前具有焦點的視窗、對話框、功能表項或工具列按鈕以外的專案。 使用所需的 [說明] 內容識別碼呼叫 WinHelp

CWinApp::OnHelpFinder

處理ID_HELP_FINDER和ID_DEFAULT_HELP命令。

afx_msg void OnHelpFinder();

備註

您必須將語句新增 ON_COMMAND( ID_HELP_FINDER, OnHelpFinder ) 至類別 CWinApp 訊息對應,才能啟用此成員函式。 如果啟用,架構會在應用程式的用戶選取 Help Finder 命令以使用標準HELP_FINDER主題來叫WinHelp用時,架構會呼叫這個訊息處理程式函式

CWinApp::OnHelpIndex

處理ID_HELP_INDEX命令並提供預設的 [說明] 主題。

afx_msg void OnHelpIndex();

備註

您必須將語句新增 ON_COMMAND( ID_HELP_INDEX, OnHelpIndex ) 至類別 CWinApp 訊息對應,才能啟用此成員函式。 如果啟用,架構會在應用程式的用戶選取 [說明索引] 命令來 WinHelp 叫用標準 HELP_INDEX 主題時,會呼叫這個訊息處理程式函式。

CWinApp::OnHelpUsing

處理ID_HELP_USING命令。

afx_msg void OnHelpUsing();

備註

您必須將語句新增 ON_COMMAND( ID_HELP_USING, OnHelpUsing ) 至類別 CWinApp 訊息對應,才能啟用此成員函式。 當應用程式的使用者選取 [說明使用] 命令,以使用標準HELP_HELPONHELP主題叫WinHelp用應用程式時,架構會呼叫這個訊息處理程式函式。

CWinApp::OnIdle

覆寫此成員函式以執行閑置時間處理。

virtual BOOL OnIdle(LONG lCount);

參數

lCount
每次呼叫應用程式消息隊列為空白時,都會 OnIdle 遞增計數器。 每次處理新訊息時,此計數會重設為 0。 您可以使用 lCount 參數來判斷應用程式閒置的相對時間長度,而不需要處理訊息。

傳回值

非零接收更多閑置處理時間;如果不再需要空閒時間,則為 0。

備註

OnIdle 當應用程式的消息佇列是空的時,會在預設訊息循環中呼叫 。 使用覆寫呼叫您自己的背景閑置處理程式工作。

OnIdle 應該傳回 0,表示不需要閑置的處理時間。 每次OnIdle呼叫消息隊列為空時,都會遞增 lCount 參數,並在每次處理新訊息時重設為 0。 您可以根據這個計數呼叫不同的閑置例程。

下列摘要說明閑置循環處理:

  1. 如果Microsoft基礎類別庫中的訊息循環會檢查消息佇列,並找不到擱置中的訊息,它會呼叫 OnIdle 應用程式物件,並提供 0 做為 lCount 自變數。

  2. OnIdle 會執行某些處理並傳回非零值,表示應該再次呼叫它以執行進一步的處理。

  3. 訊息迴圈會再次檢查消息佇列。 如果沒有任何訊息擱置中,它會再次呼叫 OnIdle ,並 遞增 lCount 自變數。

  4. 最後, OnIdle 完成處理其所有閑置工作,並傳回 0。 這會告訴訊息迴圈停止呼叫 OnIdle ,直到收到來自消息佇列的下一個訊息為止,此時閒置迴圈會重新啟動,自變數設定為 0。

請勿在 期間 OnIdle 執行冗長的工作,因為您的應用程式在傳回之前 OnIdle 無法處理用戶輸入。

注意

更新命令使用者介面對象的預設實作 OnIdle ,例如功能表項和工具列按鈕,它會執行內部數據結構清除。 因此,如果您覆寫 OnIdle,則必須在lCount覆寫的版本中使用 呼叫 CWinApp::OnIdle 。 首先呼叫所有基類閑置處理(也就是,直到基類 OnIdle 傳回 0 為止)。 如果您需要在基類處理完成之前執行工作,請檢閱基類實作,以選取適當的 lCount 來執行您的工作。

如果您不想 OnIdle 在從消息佇列擷取訊息時呼叫,您可以覆寫 CWinThreadIsIdleMessage。 如果應用程式已設定非常短的定時器,或系統正在傳送WM_SYSTIMER訊息, OnIdle 則會重複呼叫,並降低效能。

範例

下列兩個範例示範如何使用 OnIdle。 第一個範例會使用 lCount 自變數處理兩個閑置工作,以排定工作的優先順序。 第一個工作是高優先順序,您應該盡可能執行。 第二個工作較不重要,只有在使用者輸入中有長時間暫停時,才應該完成。 請注意 對基類版本的 OnIdle呼叫。 第二個範例會管理具有不同優先順序的閑置工作群組。

BOOL CMyApp::OnIdle(LONG lCount)
{
   BOOL bMore = CWinApp::OnIdle(lCount);

   if (lCount == 0)
   {
      TRACE(_T("App idle for short period of time\n"));
      bMore = TRUE;
   }
   else if (lCount == 10)
   {
      TRACE(_T("App idle for longer amount of time\n"));
      bMore = TRUE;
   }
   else if (lCount == 100)
   {
      TRACE(_T("App idle for even longer amount of time\n"));
      bMore = TRUE;
   }
   else if (lCount == 1000)
   {
      TRACE(_T("App idle for quite a long period of time\n"));
      // bMore is not set to TRUE, no longer need idle
      // IMPORTANT: bMore is not set to FALSE since CWinApp::OnIdle may
      // have more idle tasks to complete.
   }

   return bMore;
   // return TRUE as long as there are any more idle tasks
}

CWinApp::OpenDocumentFile

架構會呼叫此方法,以開啟應用程式的具名 CDocument 檔案。

virtual CDocument* OpenDocumentFile(
    LPCTSTR lpszFileName
    BOOL bAddToMRU = TRUE);

參數

lpszFileName
[in]要開啟的檔名。

bAddToMRU
[in]TRUE 表示檔是其中一個最新的檔案;FALSE 表示檔不是其中一個最新的檔案。

傳回值

如果成功,則為的指標,否則為 CDocument NULL。

備註

如果具有該名稱的檔已經開啟,則包含該檔的第一個框架視窗會取得焦點。 如果應用程式支援多個檔範本,架構會使用擴展名來尋找適當的檔範本,以嘗試載入檔。 如果成功,檔範本會建立檔的框架視窗和檢視。

範例

if (m_lpCmdLine[0] == _T('\0'))
{
   // Create a new (empty) document.
   OnFileNew();
}
else
{
   // Open a file passed as the first command line parameter.
   OpenDocumentFile(m_lpCmdLine);
}

CWinApp::P arseCommandLine

呼叫此成員函式來剖析命令行,並將參數一次一個傳送至 CCommandLineInfo::P arseParam

void ParseCommandLine(CCommandLineInfo& rCmdInfo);

參數

rCmdInfo
CCommandLineInfo 對象的參考

備註

當您使用應用程式精靈啟動新的 MFC 專案時,應用程式精靈會建立 的CCommandLineInfo本機實例,然後在 InitInstance 成員函式中呼叫 ProcessShellCommandParseCommandLine 。 命令行遵循以下所述的路由:

  1. 在 中 InitInstance建立之後,物件 CCommandLineInfo 會傳遞至 ParseCommandLine

  2. ParseCommandLine 然後針對每個參數重複呼叫 CCommandLineInfo::ParseParam 一次。

  3. ParseParam 填入 CCommandLineInfo 物件,然後傳遞至 ProcessShellCommand

  4. ProcessShellCommand 會處理命令行自變數和旗標。

請注意,您可以視需要直接呼叫 ParseCommandLine

如需命令行旗標的描述,請參閱 CCommandLineInfo::m_nShellCommand

CWinApp::P reTranslateMessage

覆寫此函式以在分派至 Windows 函式 TranslateMessage 和 DispatchMessage 之前篩選視窗訊息。預設實作會執行快捷鍵轉譯,因此您必須在覆寫的版本中呼叫CWinApp::PreTranslateMessage成員函式。

virtual BOOL PreTranslateMessage(MSG* pMsg);

參數

pMsg
MSG 結構的指標,其中包含要處理的訊息。

傳回值

如果訊息已在 中 PreTranslateMessage 完全處理,且不應該進一步處理,則為非零。 如果訊息應該以正常方式處理,則為零。

CWinApp::P rocessMessageFilter

架構的攔截函式會呼叫此成員函式,以篩選和回應特定 Windows 訊息。

virtual BOOL ProcessMessageFilter(
    int code,
    LPMSG lpMsg);

參數

code
指定勾點程序代碼。 此成員函式會使用程式代碼來判斷如何處理 lpMsg。

lpMsg
Windows MSG截線的指標。

傳回值

如果處理訊息,則為非零;否則為 0。

備註

攔截函式會先處理事件,再傳送至應用程式的一般訊息處理。

如果您覆寫此進階功能,請務必呼叫基類版本,以維護架構的攔截處理。

CWinApp::P rocessShellCommand

InitInstance呼叫此成員函式,以接受從 CCommandLineInfo rCmdInfo 識別的對象傳遞的參數,並執行指示的動作。

BOOL ProcessShellCommand(CCommandLineInfo& rCmdInfo);

參數

rCmdInfo
CCommandLineInfo 對象的參考

傳回值

如果殼層命令已成功處理,則為非零。 如果為 0,請從 InitInstance 傳回 FALSE。

備註

當您使用應用程式精靈啟動新的 MFC 專案時,應用程式精靈會建立 的CCommandLineInfo本機實例,然後在成員函式中InitInstance呼叫 ProcessShellCommandParseCommandLine。 命令行遵循以下所述的路由:

  1. 在 中 InitInstance建立之後,物件 CCommandLineInfo 會傳遞至 ParseCommandLine

  2. ParseCommandLine 然後針對每個參數重複呼叫 CCommandLineInfo::P arseParam

  3. ParseParam 填入 CCommandLineInfo 物件,然後傳遞至 ProcessShellCommand

  4. ProcessShellCommand 會處理命令行自變數和旗標。

CCommandLineInfo::m_nShellCommand 所識別的對象數據成員CCommandLineInfo屬於下列列舉型別,定義於 CCommandLineInfo 類別內。

enum {
    FileNew,
    FileOpen,
    FilePrint,
    FilePrintTo,
    FileDDE
    };

如需這些值的簡短描述,請參閱 CCommandLineInfo::m_nShellCommand

CWinApp::P rocessWndProcException

每當處理程式未攔截在其中一個應用程式訊息或命令處理程式中擲回的例外狀況時,架構就會呼叫這個成員函式。

virtual LRESULT ProcessWndProcException(
    CException* e,
    const MSG* pMsg);

參數

e
未攔截例外狀況的指標。

pMsg
MSGtructure,其中包含導致架構擲回例外狀況之 Windows 訊息的相關信息。

傳回值

應該傳回至 Windows 的值。 一般而言,對於 Windows 訊息而言,這是 0L,命令訊息為 1L (TRUE)。

備註

請勿直接呼叫這個成員函式。

這個成員函式的預設實作會建立消息框。 如果未攔截的例外狀況源自功能表、工具列或快捷鍵命令失敗,消息框會顯示「命令失敗」訊息;否則,它會顯示「內部應用程式錯誤」訊息。

覆寫此成員函式以提供例外狀況的全域處理。 只有當您想要顯示消息框時,才呼叫基底功能。

CWinApp::Register

執行任何未由 處理的 RegisterShellFileTypes註冊工作。

virtual BOOL Register();

傳回值

非零成功,否則為 0。

備註

默認實作只會傳回 TRUE。 覆寫此函式以提供任何自定義的註冊步驟。

CWinApp::RegisterShellFileTypes

呼叫這個成員函式,向 Windows 檔案管理員註冊應用程式的所有文件類型。

void RegisterShellFileTypes(BOOL bCompat = FALSE);

參數

bCompat
[in]TRUE 會新增Shell命令的註冊專案 Print and Print To,允許使用者直接從殼層列印檔案,或將檔案拖曳至列印機物件。 它也會新增DefaultIcon機碼。 根據預設,此參數為 FALSE,以提供回溯相容性。

備註

這可讓使用者在檔案管理員內按兩下應用程式所建立的數據檔。 在您針對應用程式中的每個檔案樣本呼叫 AddDocTemplate 之後呼叫 RegisterShellFileTypes 。 當您呼叫 時,也請呼叫 RegisterShellFileTypesEnableShellOpen 成員函式。

RegisterShellFileTypes 逐一查看應用程式維護的 CDocTemplate 物件清單,以及針對每個文件範本,將專案新增至 Windows 針對檔案關聯所維護的註冊資料庫。 當使用者按兩下資料檔時,檔案管理員會使用這些項目來開啟資料檔。 這樣就不需要寄送 。REG 檔案與您的應用程式。

注意

RegisterShellFileTypes 只有在使用者以系統管理員許可權執行程式時,才能運作。 如果程式沒有系統管理員許可權,就無法改變登錄機碼。

如果註冊資料庫已經將指定的擴展名與另一個檔類型產生關聯,則不會建立新的關聯。 CDocTemplate如需註冊這項資訊所需的字串格式,請參閱 類別。

CWinApp::RegisterWithRestartManager

向重新啟動管理員註冊應用程式。

virtual HRESULT RegisterWithRestartManager(
    BOOL bRegisterRecoveryCallback,
    const CString& strRestartIdentifier);

virtual HRESULT RegisterWithRestartManager(
    LPCWSTR pwzCommandLineArgs,
    DWORD dwRestartFlags,
    APPLICATION_RECOVERY_CALLBACK pRecoveryCallback,
    LPVOID lpvParam,
    DWORD dwPingInterval,
    DWORD dwCallbackFlags);

參數

bRegisterRecoveryCallback
[in]TRUE 表示此應用程式的實例使用復原回呼函式;FALSE 表示它不會。 架構會在應用程式意外結束時呼叫復原回呼函式。 如需詳細資訊,請參閱 CWinApp::ApplicationRecoveryCallback

strRestartIdentifier
[in]識別此重新啟動管理員實例的唯一字串。 重新啟動管理員標識碼對於應用程式的每個實例而言都是唯一的。

pwzCommandLineArgs
[in]包含命令列中任何額外自變數的字串。

dwRestartFlags
[in]重新啟動管理員的選擇性旗標。 如需詳細資訊,請參閱備註一節。

pRecoveryCallback
[in]復原回呼函式。 此函式必須接受 LPVOID 參數作為輸入,並傳回 DWORD。 預設復原回呼函式為 CWinApp::ApplicationRecoveryCallback

lpvParam
[in]復原回呼函式的輸入參數。 如需詳細資訊,請參閱 CWinApp::ApplicationRecoveryCallback

dwPingInterval
[in]重新啟動管理員等候復原回呼函式傳回的時間長度。 此參數以毫秒為單位。

dwCallbackFlags
[in]傳遞至復原回呼函式的旗標。 保留供未來使用。

傳回值

如果方法成功,S_OK;否則為錯誤碼。

備註

如果您的應用程式使用預設 MFC 實作來自動儲存檔案,您應該使用 簡單版本的 RegisterWithRestartManager。 如果您想要自定義應用程式的自動儲存行為,請使用 的複雜版本 RegisterWithRestartManager

如果您使用 strRestartIdentifier空字串呼叫此方法,RegisterWithRestartManager請為此重新啟動管理員實例建立唯一標識符字串。

當應用程式意外結束時,重新啟動管理員會從命令行重新啟動應用程式,並提供唯一的重新啟動標識碼做為選擇性自變數。 在此案例中,架構會呼叫 RegisterWithRestartManager 兩次。 第一次呼叫來自 CWinApp::InitInstance ,其中包含字串標識符的空字串。 然後,使用唯一重新啟動標識符呼叫 CWinApp::P rocessShellCommand RegisterWithRestartManager 方法

向重新啟動管理員註冊應用程式之後,重新啟動管理員會監視應用程式。 如果應用程式意外結束,重新啟動管理員會在關閉程式期間呼叫復原回呼函式。 重新啟動管理員會 等候 dwPingInterval ,以取得復原回呼函式的回應。 如果復原回呼函式在此時間內沒有回應,應用程式就會結束,而不需要執行復原回呼函式。

根據預設,不支援 dwRestartFlags,但會提供以供日後使用。 dwRestartFlags 的可能值如下所示:

  • RESTART_NO_CRASH

  • RESTART_NO_HANG

  • RESTART_NO_PATCH

  • RESTART_NO_REBOOT

CWinApp::ReopenPreviousFilesAtRestart

判斷重新啟動管理員是否會重新開啟應用程式意外結束時開啟的檔案。

virtual BOOL ReopenPreviousFilesAtRestart() const;

傳回值

TRUE 表示重新啟動管理員會重新開啟先前開啟的檔案;FALSE 表示重新啟動管理員不會。

CWinApp::RestartInstance

處理由重新啟動管理員起始的應用程式重新啟動。

virtual BOOL CWinApp::RestartInstance();

傳回值

如果數據復原處理程序開啟先前開啟的檔,則為TRUE;如果數據復原處理程式發生錯誤或先前沒有開啟的檔,則為 FALSE。

備註

當重新啟動管理員重新啟動應用程式時,架構會呼叫此方法。 此方法會擷取數據復原處理程式,並還原自動儲存的檔案。 此方法會呼叫 CDataRecoveryHandler::RestoreAutosavedDocuments 來判斷使用者是否要還原自動儲存的檔案。

如果 CDataRecoveryHandler 判斷沒有開啟的文件,這個方法會傳回 FALSE。 如果沒有開啟的檔案,應用程式通常會啟動。

CWinApp::RestoreAutosavedFilesAtRestart

判斷重新啟動管理員是否會在重新啟動應用程式時還原自動儲存的檔案。

virtual BOOL RestoreAutosavedFilesAtRestart() const;

傳回值

TRUE 表示重新啟動管理員還原自動儲存的檔案;FALSE 表示重新啟動管理員不會。

CWinApp::Run

提供預設訊息迴圈。

virtual int Run();

傳回值

int WinMain傳回的值。

備註

Run 取得並分派 Windows 訊息,直到應用程式收到WM_QUIT訊息為止。 如果應用程式的消息佇列目前未包含任何訊息, Run 請呼叫 OnIdle 以執行閑置時間處理。 傳入訊息會移至 PreTranslateMessage 成員函式以進行特殊處理,然後移至 Windows TranslateMessage 函式進行標準鍵盤翻譯;最後, DispatchMessage 會呼叫 Windows 函式。

Run 很少被覆寫,但您可以覆寫它以提供特殊行為。

CWinApp::RunAutomated

呼叫此函式來判斷用戶端應用程式是否已啟動 「/Automation」 或 「-Automation」 選項,指出伺服器應用程式是否由用戶端應用程式啟動。

BOOL RunAutomated();

傳回值

如果找到選項,則為非零;否則為 0。

備註

如果存在,則會從命令行移除選項。 如需 OLE 自動化的詳細資訊,請參閱自動化伺服器一文

CWinApp::RunEmbedded

呼叫此函式來判斷用戶端應用程式是否已啟動伺服器應用程式“ /Embedding” 或 “ -Embedding” 選項。

BOOL RunEmbedded();

傳回值

如果找到選項,則為非零;否則為 0。

備註

如果存在,則會從命令行移除選項。 如需內嵌的詳細資訊,請參閱伺服器:實作伺服器一文

CWinApp::SaveAllModified

架構呼叫,可在應用程式的主框架視窗關閉或透過WM_QUERYENDSESSION訊息時儲存所有檔。

virtual BOOL SaveAllModified();

傳回值

如果安全終止應用程式,則為非零;如果無法安全終止應用程式,則為 0。

備註

此成員函式的預設實作會針對應用程式內所有已修改的檔呼叫 CDocument::SaveModified 成員函式。

CWinApp::SelectPrinter

呼叫此成員函式以選取特定印表機,並釋放先前在 [列印] 對話框中選取的印表機。

void SelectPrinter(
    HANDLE hDevNames,
    HANDLE hDevMode,
    BOOL bFreeOld = TRUE);

參數

hDevNames
識別特定印表機之驅動程式、裝置和輸出埠名稱的 DEVNAMES截線句柄

hDevMode
DEVMODE 結構的句柄,指定印表機裝置初始化和環境的相關信息。

bFreeOld
釋放先前選取的印表機。

備註

如果 hDevModehDevNames 都是 NULL,SelectPrinter請使用目前的預設印表機。

CWinApp::SetHelpMode

設定應用程式的說明類型。

void SetHelpMode(AFX_HELP_TYPE eHelpType);

參數

eHelpType
指定要使用的說明類型。 如需詳細資訊,請參閱 CWinApp::m_eHelpType

備註

設定應用程式的 [說明] 類型。

若要將應用程式的 [說明類型] 設定為 HTMLHelp,您可以呼叫 EnableHTMLHelpEnableHTMLHelp呼叫 之後,您的應用程式必須使用 HTMLHelp 作為其說明應用程式。 如果您要變更為使用 WinHelp,您可以將 eHelpType 呼叫SetHelpMode並設定afxWinHelp

CWinApp::SetRegistryKey

讓應用程式設定儲存在登錄中,而不是 INI 檔案。

void SetRegistryKey(LPCTSTR lpszRegistryKey);
void SetRegistryKey(UINT nIDRegistryKey);

參數

lpszRegistryKey
包含索引鍵名稱的字串指標。

nIDRegistryKey
包含登錄機碼名稱的字串資源標識碼。

備註

此函式會設定m_pszRegistryKey,然後由 GetProfileInt的、WriteProfileIntGetProfileString 、 和 WriteProfileString 成員函式CWinApp使用。 如果已呼叫此函式,則最近使用的檔案清單也會儲存在登錄中。 登錄機碼通常是公司的名稱。 它會以下列格式的索引鍵儲存:HKEY_CURRENT_USER\Software\<company name>\<application name\<section name>>\<value name>。

CWinApp::SupportsApplicationRecovery

判斷重新啟動管理員是否會復原非預期結束的應用程式。

virtual BOOL SupportsApplicationRecovery() const;

傳回值

TRUE 表示重新啟動管理員會復原應用程式;FALSE 表示重新啟動管理員不會。

CWinApp::SupportsAutosaveAtInterval

判斷重新啟動管理員是否定期自動儲存開啟的檔。

virtual BOOL SupportsAutosaveAtInterval() const;

傳回值

TRUE 表示重新啟動管理員會自動儲存開啟的檔;FALSE 表示重新啟動管理員不會。

CWinApp::SupportsAutosaveAtRestart

判斷重新啟動管理員是否會在應用程式重新啟動時自動儲存任何開啟的檔。

virtual BOOL SupportsAutosaveAtRestart() const;

傳回值

TRUE 表示重新啟動管理員會在應用程式重新啟動時自動儲存開啟的檔;FALSE 表示重新啟動管理員不會。

CWinApp::SupportsRestartManager

判斷應用程式是否支援重新啟動管理員。

virtual BOOL SupportsRestartManager() const;

傳回值

TRUE 表示應用程式支援重新啟動管理員;FALSE 表示應用程式沒有。

CWinApp::Unregister

取消註冊應用程式物件註冊的所有檔案。

virtual BOOL Unregister();

傳回值

非零成功,否則為 0。

備註

Unregister 式會復原應用程式物件和 Register 函式所執行的註冊。 一般而言,MFC 會隱含呼叫這兩個函式,因此不會出現在您的程式代碼中。

覆寫此函式以執行自定義取消註冊步驟。

CWinApp::UnregisterShellFileTypes

呼叫此成員函式,以向 Windows 檔案管理員取消註冊應用程式的所有檔案類型。

void UnregisterShellFileTypes();

CWinApp::WinHelp

呼叫此成員函式以叫用 WinHelp 應用程式。

virtual void WinHelp(
    DWORD_PTR dwData,
    UINT nCmd = HELP_CONTEXT);

參數

dwData
指定其他數據。 所使用的值取決於 nCmd 參數的值

nCmd
指定要求的說明類型。 如需可能值的清單,以及它們如何影響 dwData 參數,請參閱 WinHelp Windows 函式。

備註

架構也會呼叫此函式來叫用 WinHelp 應用程式。

架構會在您的應用程式終止時自動關閉 WinHelp 應用程式。

範例

// Header File: HELPIDS.H
//
// This example header file is #include'd twice:
// (1) It is #include'd by the .CPP file that passes the DWORD
//     context i.d. to CWinApp::WinHelp.
// (2) It is #include'd in the [MAP] section of the .HPJ file,
//     to associate the help context string "HID_MYTOPIC" with
//     the help context numeric i.d., 101.
// The help context string "HID_MYTOPIC" is what identifies the
// help topic in the help .RTF source file, in the "#" footnote:
//     # HID_MYTOPIC
//
// Note, it is not necessary to manage help context id's this way
// for help topics associated with command id's and user interface
// id's defined in your RESOURCE.H file; you should use the MAKEHM
// tool via the custom build rule on your resource.h file to produce
// a help map (.HM) file for these id's.  It is necessary to manage
// help context id's as illustrated here only for help topics not
// associated with command id's or user interface id's.

#define HID_MYTOPIC 101

// Show the custom help topic that has the context string
// "HID_MYTOPIC" in the help .RTF file, and which is mapped
// to the DWORD i.d. HID_MYTOPIC in the above HELPIDS.H file.
AfxGetApp()->WinHelp(HID_MYTOPIC);

// The following is one line of code in the help map (.HM)
// file produced by the MAKEHM tool, which is called by the custom
// build rule on the resource.h file.  The MAKEHM tool reads the
// following #define in the application's RESOURCE.H file:
#define ID_MYCOMMAND 0x08004
// and adds a help id offset value of 0x10000 to create the
// help context DWORD value 0x18004:
// HID_MYCOMMAND                           0x18004
// See MFC Tech Note 28 for more information on help id offset values.

// Rarely will you need to directly call WinHelp yourself
// with the help context i.d. for a command or user interface
// object. The framework will call WinHelp automatically when
// the user, for example, hits F1 when the focus is on a
// My Command menu item. However, if you do want to directly
// call WinHelp for the help topic associated with the command,
// here is how you would do it:

AfxGetApp()->WinHelp(0x10000 + ID_MYCOMMAND);

CWinApp::WriteProfileBinary

呼叫這個成員函式,將二進位數據寫入應用程式登錄或 的指定區段。INI 檔案。

BOOL WriteProfileBinary(
    LPCTSTR lpszSection,
    LPCTSTR lpszEntry,
    LPBYTE pData,
    UINT nBytes);

參數

lpszSection
指向以 null 終止的字串,這個字串指定包含項目的區段。 如果區段不存在,則會建立該區段。 區段的名稱與大小寫無關;字串可以是大寫和小寫字母的任何組合。

lpszEntry
指向 Null 終止的字串,其中包含要寫入值的專案。 如果專案不存在於指定的區段中,則會建立該專案。

pData
指向要寫入的數據。

nBytes
包含要寫入的位元組數目。

傳回值

如果成功則為非零;否則為 0。

範例

這個範例會使用 CWinApp* pApp = AfxGetApp(); 來取得 CWinApp 類別,說明可從 MFC 應用程式中的任何函式使用和GetProfileBinary方法WriteProfileBinary

CWinApp *pApp = AfxGetApp();

CString strSection = _T("My Section");
CString strItem = _T("My Binary Item");
double myData = 123.456e12;

pApp->WriteProfileBinary(strSection, strItem, (LPBYTE)&myData, sizeof(myData));
double *pData;
UINT n;
pApp->GetProfileBinary(strSection, strItem, (LPBYTE*)&pData, &n);
ASSERT(n == sizeof(myData));
ASSERT(myData = *pData);
delete[] pData; // free the buffer

如需另一個範例,請參閱 CWinApp::GetProfileBinary 的範例

CWinApp::WriteProfileInt

呼叫這個成員函式,將指定的值寫入應用程式登錄或 的指定區段。INI 檔案。

BOOL WriteProfileInt(
    LPCTSTR lpszSection,
    LPCTSTR lpszEntry,
    int nValue);

參數

lpszSection
指向以 null 終止的字串,這個字串指定包含項目的區段。 如果區段不存在,則會建立該區段。 區段的名稱與大小寫無關;字串可以是大寫和小寫字母的任何組合。

lpszEntry
指向 Null 終止的字串,其中包含要寫入值的專案。 如果專案不存在於指定的區段中,則會建立該專案。

nValue
包含要寫入的值。

傳回值

如果成功則為非零;否則為 0。

範例

這個範例會使用 CWinApp* pApp = AfxGetApp(); 來取得 CWinApp 類別,說明 、、 GetProfileStringGetProfileInt 可從 MFC 應用程式中的任何函式使用的方式WriteProfileStringWriteProfileInt

CWinApp *pApp = AfxGetApp();

CString strSection = _T("My Section");
CString strStringItem = _T("My String Item");
CString strIntItem = _T("My Int Item");

pApp->WriteProfileString(strSection, strStringItem, _T("test"));

CString strValue;
strValue = pApp->GetProfileString(strSection, strStringItem);
ASSERT(strValue == _T("test"));

pApp->WriteProfileInt(strSection, strIntItem, 1234);

int nValue;
nValue = pApp->GetProfileInt(strSection, strIntItem, 0);
ASSERT(nValue == 1234);

如需另一個範例,請參閱 CWinApp::GetProfileInt 的範例

CWinApp::WriteProfileString

呼叫這個成員函式,將指定的字串寫入應用程式登錄或 的指定區段。INI 檔案。

BOOL WriteProfileString(
    LPCTSTR lpszSection,
    LPCTSTR lpszEntry,
    LPCTSTR lpszValue);

參數

lpszSection
指向以 null 終止的字串,這個字串指定包含項目的區段。 如果區段不存在,則會建立該區段。 區段的名稱與大小寫無關;字串可以是大寫和小寫字母的任何組合。

lpszEntry
指向 Null 終止的字串,其中包含要寫入值的專案。 如果專案不存在於指定的區段中,則會建立該專案。 如果此參數為 NULL,則會刪除 lpszSection 所 指定的區段

lpszValue
指向要寫入的字串。 如果此參數為 NULL,則會刪除 lpszEntry 參數所指定的專案。

傳回值

如果成功則為非零;否則為 0。

範例

CWinApp *pApp = AfxGetApp();

CString strSection = _T("My Section");
CString strStringItem = _T("My String Item");
CString strIntItem = _T("My Int Item");

pApp->WriteProfileString(strSection, strStringItem, _T("test"));

CString strValue;
strValue = pApp->GetProfileString(strSection, strStringItem);
ASSERT(strValue == _T("test"));

pApp->WriteProfileInt(strSection, strIntItem, 1234);

int nValue;
nValue = pApp->GetProfileInt(strSection, strIntItem, 0);
ASSERT(nValue == 1234);

如需另一個範例,請參閱 CWinApp::GetProfileInt 的範例

CWinApp::SetAppID

明確設定應用程式的應用程式使用者模型標識碼。 在向用戶呈現任何使用者介面之前,應該先呼叫這個方法(最好的位置是應用程式建構函式)。

void SetAppID(LPCTSTR lpcszAppID);

參數

lpcszAppID
指定應用程式使用者模型識別碼。

備註

另請參閱

CWinThread 類別
階層架構圖表
如何:新增重新啟動管理員支援