Проблема, с которой вы столкнулись (предположительно), заключается в том, что окно фрейма верхнего уровня вашего приложения является окном ANSI. При создании окна при создании окна (с помощью CreateWindow () или CreateWindowEx ()) должен быть предоставлен класс окна. Этот класс окна определяет свойства окна, включая то, принимает ли оно по умолчанию сообщения ANSI или Unicode. В свою очередь, это определяется тем, регистрируете ли вы (или ваша структура) класс окна, вызывая RegisterClassExA () или RegisterClassExW ().
Что почти наверняка случается, так это то, что класс вашего окна верхнего уровня регистрируется в RegisterClassExA (). Это означает, что стандартная оконная процедура для окна будет преобразовывать все строки Unicode в сообщениях в ANSI перед их обработкой, следовательно, знаки вопроса и нечетные символы везде.
Самое простое решение всего этого - просто сделать приложение Unicode повсеместно (обычно это делается путем определения _UNICODE). Другой способ - выяснить, где вызывается RegisterClassEx (), и сделать его RegisterClassExW (). Это может вызвать проблемы ANSI / Unicode с другими сообщениями, но это должно (по крайней мере теоретически) работать. Конечно, в любом случае Windows 9X сломается, если это проблема.
Если все это звучит ужасно сложно, вы не ошибаетесь ...