AfxMessageBox 参数中没有设定标题的一项,不像MessageBox函数直接能在参数中设定..
细看以下分析,可知AfxMessageBox 的底层实现无非也是调用MessageBox函数,而其标题的设定默认为工程名而已。
分析如下:
在代码中随便写一句AfxMessageBox(TEXT("test..")); 直接按 F12 跳转函数的定义是没有作用的。。 所以在这里断点,运行程序至此,按F11 一步一步可见到函数的实际运行是如下:
Appui1.cpp
// Helper for message boxes; can work when no CWinApp can be found
int CWinApp::ShowAppMessageBox(CWinApp *pApp, LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt)
{
// …
TCHAR szAppName[_MAX_PATH];
szAppName[0] = '\0';
LPCTSTR pszAppName;
if (pApp != NULL)
pszAppName = pApp->m_pszAppName; // 注意这一行。
else
{
pszAppName = szAppName;
DWORD dwLen = GetModuleFileName(NULL, szAppName, _MAX_PATH);
if (dwLen == _MAX_PATH)
szAppName[_MAX_PATH - 1] = '\0';
}
int nResult =
::AfxCtxMessageBox(hWnd, lpszPrompt, pszAppName, nType); // 注意这一行实则调用 AFX_ISOLATIONAWARE_STATICLINK_FUNC(int ,MessageBoxW,(HWND hWnd,LPCWSTR lpText,LPCWSTR lpCaption,UINT uType),(hWnd,lpText,lpCaption,uType),0)
}
因此,关于AfxMessageBox 消息框引起的标题没有多国化的问题可如下解决
BOOL C**App::InitInstance()
{
// ...
// 处理多国语言的提示框标题多国化
CString strAppName;
strAppName.LoadString(IDR_MAINFRAME); // IDR_MAINFRAME 是字符串,这里的多语言与其他一样了,这里不再述
free((void*)m_pszAppName);
m_pszAppName = _tcsdup(strAppName);
// ...
}