Windows: языковая панель не отображает параметры метода ввода для некоторых из моих окон - PullRequest
1 голос
/ 24 февраля 2010

Я пытаюсь, чтобы наше приложение правильно обрабатывало международный ввод. Поскольку мы сами обрабатываем ввод текста и рендеринг шрифтов, я написал собственный код для обработки соответствующих сообщений WM_IME_ *.

Теперь все работает нормально, за одним исключением: когда главное окно наших приложений открыто, языковая панель не позволяет мне выбирать какие-либо параметры. Я могу установить язык ввода на японский или корейский, но меню для выбора методов ввода (например, хангул или хирагана) не отображаются. Затем, когда я открываю другое окно (любое другое окно, будь то одно из окон нашего приложения или стандартный диалог «Сохранить файл»), появляются параметры. Оказавшись там, они останутся, даже если я закрою другое окно. В этом случае ввод IME будет работать, как и ожидалось, в главном окне. Но, как объяснялось, только если я сначала открою другое окно.

Теперь, как окна решают, должны ли они отображать параметры метода ввода или нет? Похоже, что windows по какой-то причине не распознает наше главное окно как Unicode. Как я могу это исправить?

Заранее спасибо за любые предложения,

Джонас

Редактировать: Еще одна странная вещь, которую я заметил, заключается в том, что для моего главного окна (которое не позволяет мне изменять методы ввода) я получу сообщение WM_INPUTLANGUAGECHANGEREQUEST, когда я изменю язык ввода - который я передаю DefaultWindowProcW. Для окон, которые позволяют мне изменить метод ввода, я не получаю запрос, я просто получаю сообщение WM_INPUTLANGUAGECHANGE (которое я не получаю для другого окна).

Ответы [ 2 ]

1 голос
/ 25 февраля 2010

Хорошо, после долгих поисков я смог выяснить, что это сломало. Мы вызываем SetFocus для дочернего окна в ответ на сообщения WM_FOCUS, так что конкретное дочернее окно всегда фокусируется, когда окно выводится на передний план. Очевидно, это сбивает с толку IME-код окна и делает его неосведомленным о том, что окно может обрабатывать ввод IME.

0 голосов
/ 24 февраля 2010

Некоторые заметки

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

  • И текстовая служба не работает ни в одном из окон, для этого на целевом компьютере должна быть включена следующая настройка на

    alt text

...