Вопрос

Я создаю приложение MFC C ++ с " Использовать набор символов Unicode " выбран в Visual Studio. У меня определен UNICODE, мои строки CSt являются 16-битными, я обрабатываю имена файлов с японскими символами в них и т. Д. Но, когда я помещаю строки Unicode, содержащие японские символы, в CComboBox (используя AddString), они отображаются как ????? .

Я использую Windows XP Professional x64 (на английском языке). Если я использую региональные и языковые параметры панели управления Windows, вкладку «Дополнительно» и устанавливаю язык для программ, не поддерживающих Юникод, на японский язык, поле со списком выглядит правильно.

Итак, я хочу, чтобы мое поле со списком выглядело правильно, и я хочу понять, почему " Язык для программ, не поддерживающих Юникод, " настройка меняет поведение моей программы Unicode. Что еще я должен сделать, чтобы сообщить Windows, что мое приложение является приложением Unicode?

Спасибо за любую помощь!

Это было полезно?

Решение

Windows знает разницу между Unicode и не-Unicode программами по функциям, которые они вызывают. Большинство функций Windows API будут иметь два варианта, один из которых оканчивается на A для не-Unicode, а другой на W для Unicode. Включаемые файлы, определяющие эти функции, будут использовать настройки компилятора для автоматического выбора одного или другого для вас.

Символы могут отображаться неправильно, потому что вы выбрали шрифт, в котором их нет, в качестве шрифта пользовательского интерфейса по умолчанию.

Другие советы

Откуда вы получаете строки? Если они жестко запрограммированы в ваших источниках C, то во время вызова AddString они (скорее всего) уже повреждены.

Ничто не препятствует тому, чтобы кто-то брал строку Unicode, " squeeze " например, в std :: string и повредить его. Даже если приложения скомпилированы как Unicode.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top