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


Композиции

Композиция — это временное состояние ввода, которое позволяет службе текста указать приложению и пользователю, что входной текст по-прежнему находится в состоянии изменения. Приложение может и должно получать сведения о отображаемых атрибутах о композиции и использовать эти сведения для отображения состояния композиции пользователю.

Одним из примеров использования композиции является во время речевого ввода. Пока пользователь говорит, служба текста речи создает композицию. Эта композиция будет оставаться нетронутой до завершения всего речевого ввода. По завершении сеанса служба текста речи завершает композицию.

Приложение использует наличие и отсутствие композиции, чтобы определить, как отображать текст и какую обработку следует выполнить с текстом, если таковой имеется. Например, если пользователь использует обработчик речи для ввода текста, приложение не должно выполнять проверку орфографии или грамматики для текста композиции. Текст считается неполным до завершения композиции.

Текстовые службы

Текстовая служба создает композицию путем вызова ITfContextComposition::StartComposition. Текстовая служба может при необходимости реализовать объект ITfCompositionSink , который получает уведомления о событиях композиции. StartComposition возвращает объект ITfComposition , на который служба текста хранит ссылку и использует для изменения и завершения композиции. Текстовая служба завершает композицию путем вызова ITfComposition::EndComposition.

Если текстовая служба собирается создавать композиции, она также должна поддерживать атрибуты отображения, чтобы приложение отображал текст, который является частью композиции, не так, как стандартный текст. Дополнительные сведения см. в разделе Предоставление атрибутов отображения.

Приложения

Приложение может отслеживать создание, изменение и завершение композиций путем установки приемника ITfContextOwnerCompositionSink . При запуске композиции вызывается ITfContextOwnerCompositionSink::OnStartComposition . Аналогичным образом, при изменении или завершении композиции будут вызываться ITfContextOwnerCompositionSink::OnUpdateComposition и ITfContextOwnerCompositionSink::OnEndComposition соответственно.

Ниже приведена типичная процедура обновления документа с помощью композиции.

  1. ITextStoreACP::InsertTextAtSelection или ITextStoreAnchor::InsertTextAtSelection обычно используются для вставки исходного текста в композицию.
  2. Композиция начинается с вызова метода ITfContextComposition::StartComposition с использованием диапазона текста, возвращаемого командой InsertTextAtSelection.
  3. При получении новых входных данных, таких как речь или ввод с клавиатуры, приложение обновляет композицию с помощью ITextStoreACP::SetText или ITextStoreAnchor::SetText.
  4. Когда приложение определяет, что пора завершить композицию, оно вызывает ITfComposition::EndComposition.

Приложение должно использовать атрибуты отображения, предоставляемые текстовой службой, для изменения отображения текста в любое время, а не только при активной композиции. Дополнительные сведения см. в разделе Использование атрибутов отображения.

При необходимости приложение может завершить композицию, вызвав ITfContextOwnerCompositionServices::TerminateComposition.