在泰文或希伯来文的XP操作系统下显示文字时会出现乱码的问题,解决的方法是获取系统的nCharSet,再做设置。
代码如下:
int LanguageIdentifier = GetUserDefaultLangID() & 0xFF;
switch(LanguageIdentifier)
{
case(LANG_ARABIC):
m_CharSetTemp = ARABIC_CHARSET;
break;
case(LANG_CHINESE):
m_CharSetTemp = ANSI_CHARSET;
break;
case(LANG_ENGLISH):
m_CharSetTemp = ANSI_CHARSET;
break;
case(LANG_GREEK):
m_CharSetTemp = GREEK_CHARSET;
break;
case(LANG_HEBREW):
m_CharSetTemp = HEBREW_CHARSET;
break;
case(LANG_JAPANESE):
m_CharSetTemp = SHIFTJIS_CHARSET;
break;
case(LANG_KOREAN):
m_CharSetTemp = JOHAB_CHARSET;
break;
case(LANG_RUSSIAN):
m_CharSetTemp = RUSSIAN_CHARSET;
break;
case(LANG_THAI):
m_CharSetTemp = THAI_CHARSET;
break;
case(LANG_TURKISH):
m_CharSetTemp = TURKISH_CHARSET;
break;
case(LANG_VIETNAMESE):
m_CharSetTemp = VIETNAMESE_CHARSET;
break;
default:
m_CharSetTemp = DEFAULT_CHARSET;
break;
}
CString str;
str.Format( "LanguageIdentifier:%d,CharSet:%d",LanguageIdentifier,m_CharSetTemp);
AfxMessageBox(str);
/////////////////////////////////////////////////////////////////////////////////////
CRect rect;
GetClientRect(&rect);
CClientDC dc(this);
CFont font;
VERIFY(font.CreateFont(
18, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
m_CharSetTemp, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
NULL)); // lpszFacename
CFont *pOldFont = dc.SelectObject(&font);
dc.SetBkMode(TRANSPARENT);
CString strText;
GetDlgItemText(IDC_EDIT_TEST,strText);
dc.TextOut(350,100,strText,strText.GetLength());
dc.SelectObject(pOldFont);