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 | 显式设置应用程序的应用程序用户模型 ID。 应在向用户显示任何用户界面之前调用此方法(最佳位置是应用程序构造函数)。 |
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 | 应用程序用户模型 ID。 |
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 基础类的每个应用程序只能包含一个派生自 CWinApp
的对象。 在构造其他 C++ 全局对象时会构造此对象,它在 Windows 调用 WinMain
函数时已可用,其中该函数由 Microsoft 基础类库提供。 在全局级别声明派生的 CWinApp
对象。
从 CWinApp
中派生应用程序类时,替代 InitInstance 成员函数来创建应用程序的主窗口对象。
除了 CWinApp
成员函数之外,Microsoft 基础类库还提供以下全局函数来访问 CWinApp
对象和其他全局信息:
AfxGetApp 获取指向
CWinApp
对象的指针。AfxGetInstanceHandle 获取当前应用程序实例的句柄。
AfxGetResourceHandle 获取应用程序资源的句柄。
AfxGetAppName 获取指向包含应用程序名称的字符串的指针。 或者,如果具有指向
CWinApp
对象的指针,则使用m_pszExeName
获取应用程序的名称。
有关 CWinApp
类的详细信息(包括下列内容的概述),请参阅 CWinApp:应用程序类:
应用程序向导编写的派生自
CWinApp
的代码。CWinApp
在应用程序执行序列中的角色。CWinApp
的默认成员函数实现。CWinApp
的可重写项。
m_hPrevInstance
数据成员不复存在。 若要确定正在运行应用程序的另一个实例是否,请使用命名互斥体。 如果互斥体打开失败,则应用程序的其他实例都未在运行。
继承层次结构
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
之前先调用 HideApplication。
CWinApp::CreatePrinterDC
调用此成员函数,从所选打印机创建打印机设备上下文 (DC)。
BOOL CreatePrinterDC(CDC& dc);
参数
dc
对打印机设备上下文的引用。
返回值
如果成功创建打印机设备上下文,则为非零值;否则为 0。
备注
CreatePrinterDC
会初始化通过引用传入的设备上下文,以便你可使用它进行打印。
如果函数成功,则在完成打印时,必须销毁设备上下文。 可以让 CDC 对象的析构函数执行该操作,也可通过调用 CDC::DeleteDC 显式执行此操作。
CWinApp::CWinApp
构造一个 CWinApp
对象,并传递要存储为应用程序名称的 lpszAppName。
CWinApp(LPCTSTR lpszAppName = NULL);
参数
lpszAppName
一个以 null 结尾的字符串,其中包含 Windows 使用的应用程序名称。 如果未提供此参数,或者它是 NULL,CWinApp
使用资源字符串 AFX_IDS_APP_TITLE 或可执行文件的文件名。
备注
应构造 CWinApp
派生的类的一个全局对象。 应用程序中只能有一个 CWinApp
对象。 构造函数会存储指向 CWinApp
对象的指针,以便 WinMain
可调用该对象的成员函数来初始化和运行应用程序。
CWinApp::DelRegTree
删除特定注册表项及其所有子项。
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::DoMessageBox
框架调用此成员函数来实现全局函数 AfxMessageBox 的消息框。
virtual int DoMessageBox(
LPCTSTR lpszPrompt,
UINT nType,
UINT nIDPrompt);
参数
lpszPrompt
消息框中的文本的地址。
nType
消息框样式。
nIDPrompt
帮助上下文字符串的索引。
返回值
返回与 AfxMessageBox
相同的值。
备注
请勿调用此成员函数来打开消息框;请改用 AfxMessageBox
。
替代此成员函数来自定义 AfxMessageBox
调用的应用程序范围处理。
CWinApp::DoWaitCursor
此成员函数由框架调用来实现 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
指定是应启用 (TRUE) 还是禁用 (FALSE) 与 Windows 7 任务栏的交互。
返回值
如果可启用或禁用任务栏交互,则返回 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 对象的指针。
备注
如果通过调用 GetFirstDocTemplatePosition
建立初始位置,则可以在正向迭代循环中使用 GetNextDocTemplate
。
必须确保 POSITION 值有效。 如果该值无效,则 Microsoft 基础类库的调试版本会断言。
如果检索到的文档模板是最后一个可用的文档模板,则 pos 的新值设置为 NULL。
CWinApp::GetPrinterDeviceDefaults
调用此成员函数以准备用于打印的打印机设备上下文。
BOOL GetPrinterDeviceDefaults(struct tagPDA* pPrintDlg);
参数
pPrintDlg
指向 PRINTDLG 结构的指针。
返回值
如果成功,则不为 0;否则为 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;否则为 0。
备注
此成员函数不区分大小写,因此 lpszSection 和 lpszEntry 参数中的字符串的大小写可能不同。
注意
GetProfileBinary
会分配缓冲区并在 * ppData 中返回其地址。 调用方负责使用 delete [] 释放缓冲区。
重要
此函数返回的数据不一定是以 NULL 结尾的,并且调用方必须执行验证。 有关详细信息,请参阅 避免缓冲区溢出。
示例
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 结尾的,并且调用方必须执行验证。 有关详细信息,请参阅 避免缓冲区溢出。
示例
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 结尾的,并且调用方必须执行验证。 有关详细信息,请参阅 避免缓冲区溢出。
示例
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 应用程序必须初始化为单线程单元 (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
光标对象的 ID。 如需资源列表,请参阅 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
图标资源的 ID 编号。
返回值
如果成功,则为图标的句柄;否则为 NULL。
备注
只有当之前未加载过图标时,LoadIcon
才将图标加载到内存中;否则,它会检索现有资源的句柄。
可使用 LoadStandardIcon 或 LoadOEMIcon 成员函数访问预定义的 Windows 图标。
注意
此成员函数调用 Win32 API 函数 LoadIcon,后者只能加载大小符合 SM_CXICON 和 SM_CYICON 系统指标值的图标。
CWinApp::LoadOEMCursor
加载 nIDCursor 指定的 Windows 预定义光标资源。
HCURSOR LoadOEMCursor(UINT nIDCursor) const;
参数
nIDCursor
指定预定义 Windows 光标的 OCR_ 清单常量标识符。 必须在 #include \<afxwin.h>
前面具有 #define OEMRESOURCE
才有权访问 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_ 清单常量标识符。 必须在 #include \<afxwin.h>
前面具有 #define OEMRESOURCE
才有权访问 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 标准文本插入光标
Windows 执行耗时的任务时使用的 IDC_WAIT 沙漏光标
用于选择的 IDC_CROSS 十字光标
垂直向上的 IDC_UPARROW 箭头
IDC_SIZE 已过时且不受支持;请使用 IDC_SIZEALL
IDC_SIZEALL 四向箭头。 用于调整窗口大小的光标。
IDC_ICON 已过时且不受支持。 使用 IDC_ARROW。
IDC_SIZENWSE 双头箭头,箭头在左上侧和右下侧
IDC_SIZENWSE 双头箭头,箭头在右上侧和左下侧
IDC_SIZEWE 水平双向箭头
IDC_SIZEWE 垂直双向箭头
返回值
如果成功,则为光标的句柄;否则为 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 成员函数内部调用此成员函数,以启用并加载最近使用的 (MRU) 文件和上次预览状态的列表。
void LoadStdProfileSettings(UINT nMaxMRU = _AFX_MRU_COUNT);
参数
nMaxMRU
要跟踪的最近使用的文件数。
备注
如果 nMaxMRU 为 0,则不会维护 MRU 列表。
CWinApp::m_bHelpMode
如果应用程序处于帮助上下文模式中(通常使用 Shift + F1 调用),则为 TRUE;否则为 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 | AFX_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
此数据成员的类型是 CWinApp
类中定义的枚举类型 AFX_HELP_TYPE。
AFX_HELP_TYPE m_eHelpType;
备注
AFX_HELP_TYPE 枚举的定义如下所示:
enum AFX_HELP_TYPE {
afxWinHelp = 0,
afxHTMLHelp = 1
};
若要将应用程序的帮助设置为 HTML 帮助,请调用 SetHelpMode 并指定
afxHTMLHelp
。若要将应用程序的帮助设置为 HTML 帮助,请调用
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_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 构造函数的参数;如果未指定,则来自传递给 ID 为 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
应用程序用户模型 ID。
LPCTSTR m_pszAppID;
备注
CWinApp::OnContextHelp
处理应用程序中的 Shift+F1 帮助。
afx_msg void OnContextHelp();
备注
必须向 CWinApp
类消息映射添加 ON_COMMAND( ID_CONTEXT_HELP, OnContextHelp )
语句,并添加快捷键表条目(通常为 Shift+F1)来启用此成员函数。
OnContextHelp
将应用程序置于帮助模式。 光标会更改为箭头和问号,随后用户可移动鼠标指针,再按鼠标左键来选择对话框、窗口、菜单或命令按钮。 此成员函数会检索光标下对象的帮助上下文,并使用该帮助上下文调用 Windows 函数 WinHelp。
CWinApp::OnDDECommand
当主框架窗口收到 DDE 执行消息时由框架调用。
virtual BOOL OnDDECommand(LPTSTR lpszCommand);
参数
lpszCommand
指向应用程序收到的 DDE 命令字符串。
返回值
如果已处理命令,则为非零值;否则为 0。
备注
默认实现检查命令是否是打开文档的请求;如果是,则打开指定的文档。 当用户双击数据文件时,Windows 文件管理器通常会发送此类 DDE 命令字符串。 替代此函数以处理其他 DDE execute 命令,例如要打印的命令。
示例
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 命令的执行。
若要了解默认行为并查看如何替代此成员函数,请参阅技术说明 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
类消息映射,才能启用此成员函数。 如果启用,此函数将处理 File Open 命令的执行。
若要了解默认行为并查看如何替代此成员函数,请参阅技术说明 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
类消息映射,才能启用此成员函数。 如果启用,此函数将处理 File Print 命令的执行。
若要了解默认行为并查看如何替代此成员函数,请参阅技术说明 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。 如果当前没有上下文可用,该函数将使用默认上下文。
替代此成员函数,将帮助上下文设置为当前具有焦点的窗口、对话框、菜单项或工具栏按钮以外的其他内容。 使用所需的帮助上下文 ID 调用 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
类消息映射,才能启用此成员函数。 如果启用,则在应用程序用户选择 Help Index 命令来使用标准 HELP_INDEX 主题调用 WinHelp
时,框架会调用此消息处理程序函数。
CWinApp::OnHelpUsing
处理 ID_HELP_USING 命令。
afx_msg void OnHelpUsing();
备注
必须将 ON_COMMAND( ID_HELP_USING, OnHelpUsing )
语句添加到 CWinApp
类消息映射,才能启用此成员函数。 在应用程序用户选择 Help Using 命令来使用标准 HELP_HELPONHELP 主题调用 WinHelp
应用程序时,框架会调用此消息处理程序函数。
CWinApp::OnIdle
替代此成员函数以执行空闲时间处理。
virtual BOOL OnIdle(LONG lCount);
参数
lCount
每当应用程序的消息队列为空而调用 OnIdle
时递增的计数器。 每次处理新消息时,此计数将重置为 0。 可使用 lCount 参数来确定应用程序在没有处理消息的情况下的相对空闲时长。
返回值
若要接收更多空闲处理时间,则为非零值;如果不再需要更多空闲时间,则为 0。
备注
当应用程序的消息队列为空时,会在默认消息循环中调用 OnIdle
。 使用替代以调用自己的后台空闲处理程序任务。
OnIdle
应返回 0 以指示不需要空闲处理时间。 每当消息队列为空而调用 时,lCount 参数都会递增,并且在每次处理新消息时重置为 0。OnIdle
可以基于此计数调用不同的空闲例程。
下面总结了空闲循环处理:
如果 Microsoft 基础类库中的消息循环检查消息队列,且没有找到挂起的消息,则为应用程序对象调用
OnIdle
并提供 0 作为 lCount 参数。OnIdle
会执行一些处理并返回非零值,以指示应再次调用它来执行进一步处理。消息循环会再次检查消息队列。 如果没有消息挂起,它将再次调用
OnIdle
,从而递增 lCount 参数。最终,
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::ParseCommandLine
调用此成员函数来分析命令行并将参数逐一发送到 CCommandLineInfo::ParseParam。
void ParseCommandLine(CCommandLineInfo& rCmdInfo);
参数
rCmdInfo
对 CCommandLineInfo 对象的引用。
注解
使用应用程序向导启动新的 MFC 项目时,应用程序向导将创建 CCommandLineInfo
的本地实例,然后在 InitInstance 成员函数中调用 ProcessShellCommand
和 ParseCommandLine
。 命令行遵循下述路由:
在
InitInstance
中创建后,对象CCommandLineInfo
将传递给ParseCommandLine
。ParseCommandLine
随后会重复调用CCommandLineInfo::ParseParam
,针对每个参数调用一次。ParseParam
填充CCommandLineInfo
对象,该对象随后传递给 ProcessShellCommand。ProcessShellCommand
处理命令行参数和标志。
请注意,可根据需要直接调用 ParseCommandLine
。
有关命令行标志的说明,请参阅 CCommandLineInfo::m_nShellCommand。
CWinApp::PreTranslateMessage
替代此函数来筛选窗口消息,然后再将其分配至 Windows 函数 TranslateMessage 和 DispatchMessage。默认实现会执行快捷键转换,因此必须在替代版本中调用 CWinApp::PreTranslateMessage
成员函数。
virtual BOOL PreTranslateMessage(MSG* pMsg);
参数
pMsg
指向包含要处理的消息的 MSG 结构的指针。
返回值
如果消息已在 PreTranslateMessage
中完全处理且不应进一步处理,则为非零值。 如果消息应以正常方式处理,则为零。
CWinApp::ProcessMessageFilter
框架的挂钩函数调用此成员函数来筛选和响应某些 Windows 消息。
virtual BOOL ProcessMessageFilter(
int code,
LPMSG lpMsg);
参数
code
指定挂钩代码。 此成员函数使用此代码来确定如何处理 lpMsg。
lpMsg
指向 Windows MSG 结构的指针。
返回值
如果消息已处理,则为非零值;否则为 0。
注解
挂钩函数将在事件发送到应用程序的正常消息处理之前处理事件。
如果替代此高级功能,请确保调用基类版本以维护框架的挂钩处理。
CWinApp::ProcessShellCommand
InitInstance 调用此成员函数以接受从 CCommandLineInfo
对象传递的参数(该对象由 rCmdInfo 识别),并执行指示的操作。
BOOL ProcessShellCommand(CCommandLineInfo& rCmdInfo);
参数
rCmdInfo
对 CCommandLineInfo 对象的引用。
返回值
如果成功处理 shell 命令,则为非零值。 如果为 0,则从 InitInstance 返回 FALSE。
备注
使用应用程序向导启动新的 MFC 项目时,应用程序向导将创建 CCommandLineInfo
的本地实例,然后在 InitInstance
成员函数中调用 ProcessShellCommand
和 ParseCommandLine。 命令行遵循下述路由:
在
InitInstance
中创建后,对象CCommandLineInfo
将传递给ParseCommandLine
。ParseCommandLine
随后会重复调用 CCommandLineInfo::ParseParam,针对每个参数调用一次。ParseParam
填充CCommandLineInfo
对象,该对象随后传递给ProcessShellCommand
。ProcessShellCommand
处理命令行参数和标志。
由 CCommandLineInfo::m_nShellCommand 标识的 CCommandLineInfo
对象的数据成员属于以下枚举类型,在 CCommandLineInfo
类中进行定义。
enum {
FileNew,
FileOpen,
FilePrint,
FilePrintTo,
FileDDE
};
有关上述每个值的简要说明,请参阅 CCommandLineInfo::m_nShellCommand
。
CWinApp::ProcessWndProcException
每当处理程序未捕获在应用程序的某个消息或命令处理程序中引发的异常时,框架都会调用此成员函数。
virtual LRESULT ProcessWndProcException(
CException* e,
const MSG* pMsg);
参数
e
指向未捕获的异常的指针。
pMsg
一个 MSG 结构,其中包含有关导致框架引发异常的 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 和 Print To 添加注册条目,从而使用户能够直接从 shell 打印文件,或者通过将文件拖动到打印机对象进行打印。 它还会添加一个 DefaultIcon 键。 默认情况下,此参数为 FALSE,以实现向后兼容性。
备注
这样,用户可在文件管理器内双击应用程序创建的数据文件来打开此文件。 在为应用程序中的每个文档模板调用 AddDocTemplate 后调用 RegisterShellFileTypes
。 调用 RegisterShellFileTypes
时还调用 EnableShellOpen 成员函数。
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::ProcessShellCommand 方法使用唯一重启标识符调用 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();
返回值
WinMain
返回的 int
值。
备注
Run
会获取并调度 Windows 消息,直到应用程序接收 WM_QUIT 消息为止。 如果应用程序的消息队列当前不包含任何消息,Run
会调用 OnIdle 来执行空闲时间处理。 传入消息会转到 PreTranslateMessage 成员函数进行特殊处理,然后转到 Windows 函数 TranslateMessage
进行标准键盘转换,最后,调用 Windows 函数 DispatchMessage
。
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,可调用 SetHelpMode
并将 eHelpType 设置为 afxWinHelp
。
CWinApp::SetRegistryKey
导致应用程序设置存储在注册表中,而不是 INI 文件中。
void SetRegistryKey(LPCTSTR lpszRegistryKey);
void SetRegistryKey(UINT nIDRegistryKey);
参数
lpszRegistryKey
指向包含项名称的字符串的指针。
nIDRegistryKey
包含注册表项名称的字符串资源的 ID。
注解
此函数会设置 m_pszRegistryKey,它随后由 CWinApp
的 GetProfileInt
、GetProfileString
、WriteProfileInt
和 WriteProfileString
成员函数使用。 如果已调用此函数,则最近使用的 (MRU) 文件列表也会存储在注册表中。 注册表项通常是公司的名称。 它存储在采用下列格式的项中: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 参数,请参阅 Windows 函数 WinHelp。
备注
框架还会调用此函数来调用 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;否则为 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;否则为 0。
示例
此示例使用 CWinApp* pApp = AfxGetApp();
来转到 CWinApp 类,从而说明可从 MFC 应用程序中的任何函数使用 WriteProfileString
、WriteProfileInt
、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;否则为 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
显式设置应用程序的应用程序用户模型 ID。 应在向用户显示任何用户界面之前调用此方法(最佳位置是应用程序构造函数)。
void SetAppID(LPCTSTR lpcszAppID);
参数
lpcszAppID
指定应用程序用户模型 ID。