Поделиться через


Контекст входных данных

"Входной контекст" — это внутренняя структура, поддерживаемая IMM. Он содержит сведения о состоянии IME и используется окнами IME. По умолчанию операционная система создает и назначает входной контекст каждому потоку. В потоке этот входной контекст по умолчанию является общим ресурсом и связан с каждым вновь созданным окном.

Чтобы получить или задать сведения в редакторе IME, приложение с поддержкой IME должно сначала получить дескриптор входного контекста, связанного с указанным окном. Приложение получает дескриптор с помощью функции ImmGetContext . Он может использовать полученный дескриптор в последующих вызовах функций IMM для получения и задания значений IME, таких как стиль окна композиции, стиль композиции и положение окна состояния. После завершения работы приложения с контекстом оно должно освободить контекст с помощью функции ImmReleaseContext .

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

Приложение может создать входной контекст с помощью функции ImmCreateContext . Чтобы назначить контекст окну, приложение вызывает функцию ImmAssociateContext . Эта функция возвращает дескриптор в ранее связанный входной контекст. Если приложение еще не связыло входной контекст с окном, возвращается дескриптор для входного контекста по умолчанию. Как правило, приложение сохраняет этот дескриптор, а затем повторно привязывает его к окну, когда настраиваемый контекст входных данных больше не требуется.

После того как входной контекст связан с окном, операционная система автоматически выбирает этот контекст при активации окна и получает фокус ввода. Стиль и другие сведения в контексте ввода влияют на последующий ввод с клавиатуры для этого окна, определяя, как работает IME.

Перед завершением приложения необходимо уничтожить любой настраиваемый контекст ввода. Во-первых, приложение удаляет входной контекст из любой связи, созданной с окнами в потоке, с помощью функции ImmAssociateContext . Затем вызывается функция ImmDetextContext .

Сведения о диспетчере методов ввода