Файл меню MBCS генерирует ????Персонажи - PullRequest
0 голосов
/ 10 апреля 2019

Я работаю над приложением MBCS, используя MFC.Я пытаюсь поддерживать азиатские языки.В целях этого обсуждения мы скажем, что я пытаюсь поддержать китайский язык.Я могу поддерживать всплывающие диалоги через MessageBoxW и диалоговые экраны, вставляя китайские символы непосредственно в файл RC.Я не могу заставить работать файловые меню, используя вид ресурса или редактируя файл RC напрямую.Всякий раз, когда я набираю ЛЮБОЙ азиатский символ, на экране отображается ???.Один ?за каждого персонажа.Я попытался изменить меню в C ++, используя ModifyMenuW.Я получаю больше вопросительных знаков.Visual Studio показывает, что все работает, а RC-файл - это Unicode (UTF-16).Я не могу легко перевести мой проект в режим Unicode.Испанский, французский и немецкий все отлично работает (один из эссетов на немецком не работает, но это не ограничитель шоу).Что мне делать дальше?

Заранее спасибо!

1 Ответ

1 голос
/ 10 апреля 2019

Что ж, простой ответ - изменить приложение на Unicode, но это не всегда просто или вообще невозможно.

Что касается использования Unicode в приложении MBCS, некоторые вещи возможны, а некоторые нет,Например, я создал приложение MBCS для отображения и редактирования переводов строк программы (сообщений, меню и т. Д.) В элементе управления ListView, однако в ListView действительно есть специальное сообщение для его перевода в Unicode (LVM_SETUNICODEFORMAT) и поддержки операций (см. ТакжеCCM_SETUNICODEFORMAT).Хотя меню не являются элементами управления, но у них есть «широкие» (Unicode) функции.

Если вы хотите использовать Unicode в своем приложении, необходимо выполнить несколько тестов.Успех не гарантирован, но вы можете, по крайней мере, сделать некоторые выводы и определить, возможно ли то, что вы хотите сделать.

Test1:

Вы упомянули попытку ModifyMenuW(), но это попытается изменить существующее меню.Вместо этого попробуйте InsertMenuW() или InsertMenuItemW().Любая строка Unicode должна отображаться правильно, поэтому попробуйте не только китайский, но и другие языки (например, греческий или русский).И между прочим, я не вижу, как работает французский, а немецкий - нет (они используют одну и ту же кодовую страницу - западноевропейскую).Какая системная кодовая страница вашей тестовой машины?

Test2: (если вышеприведенное не удалось)

Попробуйте изменить все меню (SetMenu()), имеяодиночный (Unicode) элемент меню в качестве корневого.

Test3: (если вышеперечисленное не удалось)

Затем необходимо проверить, должно ли окно, содержащее меню, бытьUnicode.Создайте простое приложение Win32 «Hello World» или найдите пример, если Visual Studio не делает этого за вас (это, в основном, регистрирует класс окна, создает главное окно и запускает цикл обработки сообщений) - вы также должны добавить меню, используя «широкую» версию функций меню явно.Если это не работает, попробуйте изменить код, который создает окно, на Unicode.Таким образом, вы будете знать, нужно ли вам окно с юникодом для владения меню.

Пожалуйста, сделайте эти тесты и сообщите нам результаты.Я буду публиковать в случае необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...