CWinApp 類別
Windows 應用程式物件所衍生自的基底類別。
語法
class CWinApp : public CWinThread
成員
公用建構函式
名稱 | 描述 |
---|---|
CWinApp::CWinApp | 建構 CWinApp 物件。 |
公用方法
受保護的方法
名稱 | 描述 |
---|---|
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
的索引鍵可覆寫。
數據 m_hPrevInstance
成員已不存在。 若要判斷應用程式的另一個實例是否正在執行,請使用具名 Mutex。 如果開啟 Mutex 失敗,則沒有任何其他執行的應用程式實例。
繼承階層架構
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。
備註
呼叫 之前先呼叫CloseAllDocuments
。
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
物件。 建構函式會儲存物件的指標 CWinApp
, WinMain
以便呼叫對象的成員函式來初始化和執行應用程式。
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
此成員函式是由架構呼叫,以實 作 CWaitCursor、 CCmdTarget::BeginWaitCursor、 CCmdTarget::EndWaitCursor 和 CCmdTarget::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
先前呼叫 GetNextDocTemplate
或 GetFirstDocTemplatePosition 所傳回之 POSITION 值的參考。 這個呼叫會將值更新為下一個位置。
傳回值
CDocTemplate 物件的指標。
備註
如果您使用 呼叫 GetNextDocTemplate
建立初始位置,則可以GetFirstDocTemplatePosition
在正向反覆運算循環中使用 。
您必須確定您的 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。
備註
此成員函式不區分大小寫,因此 lpszSection 和 lpszEntry 參數中的字串在大小寫時可能會有所不同。
注意
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
轉換成 。
備註
此成員函式不區分大小寫,因此 lpszSection 和 lpszEntry 參數中的字串在大小寫時可能會有所不同。
重要
這個函式傳回的資料不一定是以 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 中 HtmlHelpW 或 HtmlHelpA API 函式中所述的 uCommand 參數。
備註
架構也會呼叫此函式來叫用 HTMLHelp 應用程式。
架構會在您的應用程式終止時自動關閉 HTMLHelp 應用程式。
CWinApp::InitInstance
Windows 允許相同程式的數個複本同時執行。
virtual BOOL InitInstance();
傳回值
如果初始化成功,則為非零;否則為 0。
備註
應用程式初始化在概念上分為兩個區段:第一次執行程式時執行的一次性應用程式初始化,以及每次執行程序複本的實例初始化,包括第一次執行。 架構的 實作 WinMain
會呼叫此函式。
覆寫 InitInstance
以初始化在 Windows 下執行之應用程式的每個新實例。 一般而言,您可以覆寫 InitInstance
來建構主窗口物件,並將數據成員設定 CWinThread::m_pMainWnd
為指向該視窗。 如需覆寫此成員函式的詳細資訊,請參閱 CWinApp:應用程式類別。
注意
MFC 應用程式必須初始化為單個線程 Apartment (STA)。 如果您在覆寫中呼叫 InitInstance
,請指定 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
只有在先前尚未載入數據指標時,才會將游標載入記憶體中;否則,它會擷取現有資源的句柄。
使用LoadStandardCursor或LoadOEMCursor成員函式來存取預先定義的 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
只有在先前尚未載入圖示時,才會載入圖示;否則,它會擷取現有資源的句柄。
您可以使用 LoadStandardIcon 或 LoadOEMIcon 成員函式來存取預先定義的 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
對應至 WinMain
參數。
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
對應至 WinMain
參數。
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
對應至 WinMain
參數。
int m_nCmdShow;
備註
當您呼叫 m_nCmdShow
作為應用程式主視窗時,應該以自變數的形式傳遞。
m_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
訊息對應,才能啟用此成員函式。 當應用程式的使用者選取 [說明使用] 命令,以使用標準WinHelp
主題叫用應用程式時,架構會呼叫這個訊息處理程式函式。
CWinApp::OnIdle
覆寫此成員函式以執行閑置時間處理。
virtual BOOL OnIdle(LONG lCount);
參數
lCount
每次呼叫應用程式消息隊列為空白時,都會 OnIdle
遞增計數器。 每次處理新訊息時,此計數會重設為 0。 您可以使用 lCount 參數來判斷應用程式閒置的相對時間長度,而不需要處理訊息。
傳回值
非零接收更多閑置處理時間;如果不再需要空閒時間,則為 0。
備註
OnIdle
當應用程式的消息佇列是空的時,會在預設訊息循環中呼叫 。 使用覆寫呼叫您自己的背景閑置處理程式工作。
OnIdle
應該傳回 0,表示不需要閑置的處理時間。
OnIdle
參數,並在每次處理新訊息時重設為 0。 您可以根據這個計數呼叫不同的閑置例程。
下列摘要說明閑置循環處理:
如果Microsoft基礎類別庫中的訊息循環會檢查消息佇列,並找不到擱置中的訊息,它會呼叫
OnIdle
應用程式物件,並提供 0 做為 lCount 自變數。OnIdle
會執行某些處理並傳回非零值,表示應該再次呼叫它以執行進一步的處理。訊息迴圈會再次檢查消息佇列。 如果沒有任何訊息擱置中,它會再次呼叫
OnIdle
,並 遞增 lCount 自變數。最後,
OnIdle
完成處理其所有閑置工作,並傳回 0。 這會告訴訊息迴圈停止呼叫OnIdle
,直到收到來自消息佇列的下一個訊息為止,此時閒置迴圈會重新啟動,自變數設定為 0。
請勿在 期間 OnIdle
執行冗長的工作,因為您的應用程式在傳回之前 OnIdle
無法處理用戶輸入。
注意
更新命令使用者介面對象的預設實作 OnIdle
,例如功能表項和工具列按鈕,它會執行內部數據結構清除。 因此,如果您覆寫 OnIdle
,則必須在CWinApp::OnIdle
覆寫的版本中使用 呼叫 lCount
。 首先呼叫所有基類閑置處理(也就是,直到基類 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
本機實例,然後在 InitInstanceProcessShellCommand
呼叫 ParseCommandLine
和 。 命令行遵循以下所述的路由:
在 中
InitInstance
建立之後,物件CCommandLineInfo
會傳遞至ParseCommandLine
。ParseCommandLine
然後針對每個參數重複呼叫CCommandLineInfo::ParseParam
一次。ParseParam
填入CCommandLineInfo
物件,然後傳遞至 ProcessShellCommand。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
本機實例,然後在成員函式中ProcessShellCommand
呼叫 和 InitInstance
。 命令行遵循以下所述的路由:
在 中
InitInstance
建立之後,物件CCommandLineInfo
會傳遞至ParseCommandLine
。ParseCommandLine
然後針對每個參數重複呼叫 CCommandLineInfo::P arseParam 。ParseParam
填入CCommandLineInfo
物件,然後傳遞至ProcessShellCommand
。ProcessShellCommand
會處理命令行自變數和旗標。
CCommandLineInfo::m_nShellCommandCCommandLineInfo
的對象數據成員屬於下列列舉型別,定義於 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,以提供回溯相容性。
備註
這可讓使用者在檔案管理員內按兩下應用程式所建立的數據檔。 在您針對應用程式中的每個檔案樣本呼叫 RegisterShellFileTypes
之後呼叫 。 當您呼叫 時,RegisterShellFileTypes
成員函式。
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
釋放先前選取的印表機。
備註
如果 hDevMode 和 hDevNames 都是 NULL,SelectPrinter
請使用目前的預設印表機。
CWinApp::SetHelpMode
設定應用程式的說明類型。
void SetHelpMode(AFX_HELP_TYPE eHelpType);
參數
eHelpType
指定要使用的說明類型。 如需詳細資訊,請參閱 CWinApp::m_eHelpType 。
備註
設定應用程式的 [說明] 類型。
若要將應用程式的 [說明類型] 設定為 HTMLHelp,您可以呼叫 EnableHTMLHelp。
EnableHTMLHelp
呼叫 之後,您的應用程式必須使用 HTMLHelp 作為其說明應用程式。 如果您要變更為使用 WinHelp,您可以將 eHelpType 呼叫SetHelpMode
並設定為 afxWinHelp
。
CWinApp::SetRegistryKey
讓應用程式設定儲存在登錄中,而不是 INI 檔案。
void SetRegistryKey(LPCTSTR lpszRegistryKey);
void SetRegistryKey(UINT nIDRegistryKey);
參數
lpszRegistryKey
包含索引鍵名稱的字串指標。
nIDRegistryKey
包含登錄機碼名稱的字串資源標識碼。
備註
此函式會設定m_pszRegistryKey,然後由 GetProfileInt
的、GetProfileString
WriteProfileInt
、 和 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 應用程式中的任何函式使用和WriteProfileBinary
方法GetProfileBinary
。
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 類別,說明 、、 WriteProfileString
和 WriteProfileInt
可從 MFC 應用程式中的任何函式使用的方式GetProfileString
GetProfileInt
。
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
指定應用程式使用者模型識別碼。