AfxMessageBox 提示框的标题的多国语言处理

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);


	// ...
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值