Как вы используете IME?

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

Если вы не справитесь с этим, появится плавающее окно, которое появляется, когда вы активируете IME (например, japanese writing active). Я нашел сообщения, которые нужно позаботиться, но я не знаю, как отправить ключи, которые я захватил в IME, и когда я получу действительный преобразованный char.

Ответы

Ответ 1

Я Microsoft SDE, которая некоторое время поддерживала (Windows и Office) корейский IME...

К сожалению, лучшая документация по IME API предоставляется сайтами сторонних разработчиков:


Вот официальная документация Microsoft: Менеджер методов ввода (MSDN)

Существует также новый, более продвинутый IME, основанный на Text Services Framework (TSF), который Microsoft предпочел бы использовать, но он еще более сложный, и старый API эмулируется довольно хорошо. Если вам не нужны какие-либо расширенные функции (например, ввод с помощью планшета/распознавания голоса/модного IME/и т.д.), Достаточно использовать старый API.

Лучшая документация по Text Services Framework - это блог TSF Aware, написанный другим разработчиком Microsoft. Эрик Браун может даже лично ответить на ваши вопросы, если вы пойдете по этому пути.

Вот официальная документация Microsoft для TSF: Text Services Framework (MSDN)

Одна функция TSF, которую вы можете найти полезной, - это возможность подавить рендеринг IME (необходим для полноэкранных игр, которые, например, должны сами рендерить IME). Просто скажите TSF, что ваше приложение будет отображать графический интерфейс IME, а затем внедрите пустой метод визуализации: Обзор режима UILess (MSDN)

Ответ 2

Я не думаю, что вы хотите подавить IME от отображения. Я никогда не использовал ничего, кроме тестирования, но я понимаю, что IME является ожидаемым/стандартным способом ввода неанглийских символов с использованием английской клавиатуры.

Если вы пишете элемент управления и хотите полностью поддерживать IME, я думаю, что два параметра, которые у вас есть, - это отвечать на различные сообщения Windows (например, WM_IME_START_COMPOSITION, WM_IME_COMPOSITION и т.д.) или использовать Структуру текстовых служб (TSF), Я понимаю, что TSF - это будущее, а в Vista и Windows 7 весь код IME основан на TSF, а сообщения Windows все еще существуют для совместимости со старыми программами.