Что ж, простой ответ - изменить приложение на 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.Таким образом, вы будете знать, нужно ли вам окно с юникодом для владения меню.
Пожалуйста, сделайте эти тесты и сообщите нам результаты.Я буду публиковать в случае необходимости.