【MFC国际化与多语言】03:SetThreadUILanguage函数导致程序不兼容winxp系统

为君一笑 提交于 2020-01-22 22:54:06

开发环境

系统:win10 x64

VS版本:VS2010 旗舰版

 

问题

MFC程序因为使用SetThreadUILanguage函数,导致程序界面异常。

 

解决方法

1、在InitInstance()例程中添加下列代码。 

switch (m_nLanguageSel)
{
case CHINESE_SIMPLIFIED:
	m_wLanguageId = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED);
	break;

case ENGLISH_US:
	m_wLanguageId = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
	break;
}

if (GetWindowsType() == WINDOWS_XP)
{
	SetThreadLocale(MAKELCID(m_wLanguageId, SORT_DEFAULT));		
}
else
{
	SetThreadUILanguage(MAKELCID(m_wLanguageId, SORT_DEFAULT));
}

 

2、GetWindowType()函数

//□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□//
//描述:获取操作系统类型
//参数:
//□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□//
BOOL GetWindowsType()
{
	OSVERSIONINFOEX osvi;
	BOOL bOsVersionInfoEx;

	ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
	bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO*) &osvi);

	//win7系统版本为NET6.1
	if((osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (osvi.dwMajorVersion >= 6) && (osvi.dwMinorVersion) >= 0)
	{
		return WINDOWS_7_10;
	}
	else
	{
		return WINDOWS_XP;
	}
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!