У меня есть приложение MFC, скомпилированное с набором MBCS.
Я создал окно со списком Unicode в обычном диалоге MBCS, используя следующий код:
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);
Когда я проверяю этот диалогиспользуя Spy ++, я вижу, что мой Window Proc: имеет (Unicode), поэтому я считаю, что он создается правильно.
Я заполняю список одной из следующих команд в зависимости от того, есть ли у меня данные в строке Unicode илиобычная строка
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()));
В большинстве случаев все выглядит хорошо,
Я вижу
Китайский: 中文 (简体)
Французский: Française
Японцы: 101
, но русский выглядит как P, за которым следует группа баров (P ||||||), а не Pусский.Когда я смотрю на содержимое CStringW в Visual Studio, я вижу правильный текст.
Почему я могу правильно видеть другие языки, а не русский?Я работаю на Windows 7 Ultimate и компилирую с Visual Studio 10
Edit
Если я изменю свой системный языковой стандарт на русский, я могу видеть русские символы в порядке.Тем не менее, ç в Francaise выглядит неправильно.
Я думал, что строки Юникода не зависят от языкового стандарта системы.Это правильно?
Чтобы заполнить мой Unicode CStringW, я делаю:
CA2W tmp_wide(po.msgstr,CodePage);
m_LanguageNames[i] = tmp_wide;
где po.msgstr - это CString, которая была прочитана из файла.В этом случае CodePage устанавливается на 1251
Если я проверяю переменные в Visual Studio, кажется, что преобразование происходит правильно.
Похоже, что мой список Unicode может отображать символы Unicode изMBCS, такой как китайский, но не может отображать символы Юникода из SBCS, который отличается от моей текущей кодовой страницы.