当前位置: 代码迷 >> 综合 >> 【MFC国际化与多语言】03:SetThreadUILanguage函数导致程序不兼容winxp系统
  详细解决方案

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

热度:19   发布时间:2024-01-25 04:21:48.0

开发环境

系统: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.1if((osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (osvi.dwMajorVersion >= 6) && (osvi.dwMinorVersion) >= 0){return WINDOWS_7_10;}else{return WINDOWS_XP;}
}