MFC unicode列表框中未正确显示俄语字符
我有一个用MBCS集编译的MFC应用程序 我使用以下代码在常规MBCS对话框上创建了一个unicode列表框:MFC unicode列表框中未正确显示俄语字符,unicode,mfc,localization,Unicode,Mfc,Localization,我有一个用MBCS集编译的MFC应用程序 我使用以下代码在常规MBCS对话框上创建了一个unicode列表框: DWORD dwStyle = WS_CHILD|WS_VISIBLE|WS_VSCROLL; hLangListBox = CreateWindowExW(WS_EX_CLIENTEDGE, //extended styles _T(L"listbox"), //control 'class' name
DWORD dwStyle = WS_CHILD|WS_VISIBLE|WS_VSCROLL;
hLangListBox = CreateWindowExW(WS_EX_CLIENTEDGE, //extended styles
_T(L"listbox"), //control 'class' name
L"Language", //control caption
dwStyle, //control style
10, //position: left
10, //position: top
200, //width
100, //height
GetSafeHwnd(), //parent window handle
//control's ID
reinterpret_cast<HMENU>(static_cast<INT_PTR>(ID_LANGUAGE_ENGLISH+20)),
AfxGetInstanceHandle(), //application instance
0);
其中po.msgstr是从文件读入的CString。在这种情况下,代码页设置为1251
如果我在VisualStudio中检查变量,似乎转换正在正确进行
似乎我的unicode列表框可以显示来自MBCS(如Chinese fine)的unicode字符,但它不能显示来自SBCS(与我当前的代码页不同)的unicode字符。我尚未解决此问题,但我认为这可能是字体问题。我不打算进一步讨论这一点,但下一步将是拥有一个所有者绘制的列表框,并为每种语言指定适当的字体。同样的问题,在很长时间后得到解决。
在我的例子中,对话框的默认字体设置为“MS Sans Serif”,只需更改为使用较新的字体“Microsoft Sans Serif”,所有问题都已解决 只是出于好奇-当你使用Unicode时,为什么你的应用程序是用MCB编译的?为什么不将其编译为Unicode应用程序?在这个阶段,它破坏了太多东西。这是第一步。奇怪的是,你得到了一个Unicode窗口。您使用MBCS编译,但使用MFC的Unicode版本?这可能会产生一些有趣的影响。据我所知,我没有使用MFC的unicode版本。您是否对俄语文本使用SendMessage或SendMessageW?此代码snipet解决了字体问题,至少对我来说是这样的:CFont font;if(font.CreatePointFont(100,_T(“Microsoft无衬线”))dlg->SetFont(&font);
CStringW m_LanguageNames[MAX_LANG];
CString sFilename;
....
::SendMessageW(hLangListBox,LB_INSERTSTRING ,nMenuPos,reinterpret_cast<LPARAM>(theApp.m_LanguageNames[i].GetBuffer()));
::SendMessage(hLangListBox,LB_INSERTSTRING ,nMenuPos,reinterpret_cast<LPARAM>(sFileName.GetBuffer()));
CA2W tmp_wide(po.msgstr,CodePage);
m_LanguageNames[i] = tmp_wide;