Контекст ввода
"Входной контекст" — это внутренняя структура, поддерживаемая IMM. Он содержит сведения о состоянии IME и используется окнами IME. По умолчанию операционная система создает и назначает входной контекст каждому потоку. В потоке этот контекст входных данных по умолчанию является общим ресурсом и связан с каждым созданным окном.
Чтобы получить или задать сведения в IME, приложение с поддержкой IME сначала должно получить дескриптор входного контекста, связанного с указанным окном. Приложение извлекает дескриптор с помощью функции ImmGetContext. Он может использовать полученный дескриптор в последующих вызовах функций IMM для получения и задания значений IME, таких как стиль окна композиции, стиль композиции и положение окна состояния. После завершения использования контекста приложение должно освободить контекст с помощью функции ImmReleaseContext.
Так как контекст входных данных по умолчанию является общим ресурсом, все изменения, внесенные приложением, применяются ко всем окнам в потоке. Однако приложение может переопределить это поведение по умолчанию, создав собственный входной контекст и связав его с одним или несколькими окнами потока. Изменения, внесенные в контекст ввода для конкретного приложения, применяются только к окнам, связанным с контекстом.
Приложение может создать входной контекст с помощью функции ImmCreateContext. Чтобы назначить контекст окну, приложение вызывает функцию ImmAssociateContext. Эта функция возвращает дескриптор ранее связанного контекста входных данных. Если приложение еще не связыло входной контекст с окном, возвращенный дескриптор используется для контекста входных данных по умолчанию. Как правило, приложение сохраняет этот дескриптор, а затем переобъединяет его с окном, когда настраиваемый входной контекст больше не нужен.
После связи входного контекста с окном операционная система автоматически выбирает этот контекст при активации окна и получает фокус ввода. Стиль и другие сведения в контексте ввода влияют на последующие входные данные клавиатуры для этого окна, определяя способ работы IME.
Приложение должно уничтожить любой настраиваемый входной контекст, прежде чем он завершится. Во-первых, приложение удаляет входной контекст из любой связи, которую он сделал с окнами в потоке с помощью функции ImmAssociateContext. Затем он вызывает функцию ImmDetextContext.
Связанные разделы