成分

合成是一种临时输入状态,使文本服务能够同时向应用程序和用户指定输入文本仍处于更改状态的用户。 应用程序可以并应获取有关合成的显示属性信息,并使用此信息向用户显示组合状态。

使用合成的一个示例是在语音输入期间。 当用户说话时,语音文本服务会创建合成。 此合成将保持不变,直到整个语音输入完成。 会话结束时,语音文本服务将终止合成。

应用程序使用存在和缺少合成来确定如何显示文本以及应该对文本执行哪些处理(如果有)。 例如,如果用户使用语音引擎输入文本,则应用程序不应对任何合成文本执行任何拼写或语法检查。 在撰写终止之前,文本被视为不完整。

文本服务

文本服务通过调用 ITfContextComposition::StartComposition来创建合成。 文本服务可以选择实现接收合成事件通知的 ITfCompositionSink 对象。 StartComposition 返回一个 ITfComposition 对象,文本服务保留对和用于修改和终止合成的引用。 文本服务通过调用 ITfComposition::EndComposition终止合成。

如果文本服务要创建合成,它还应该支持显示属性,使应用程序能够显示与标准文本不同的合成部分的文本。 有关详细信息,请参阅 提供显示属性

应用

应用程序可以通过安装 ITfContextOwnerCompositionSink 接收器来监视合成的创建、更改和终止。 启动合成后,将调用 ITfContextOwnerCompositionSink::OnStartComposition。 同样,更改或终止合成时,ITfContextOwnerCompositionSink::OnUpdateCompositionITfContextOwnerCompositionSink::OnEndComposition 分别调用。

下面是使用合成更新文档的典型过程。

  1. ITextStoreACP::InsertTextAtSelectionITextStoreAnchor::InsertTextAtSelection 通常用于在合成中插入初始文本。
  2. 该合成是通过调用 ITfContextComposition::StartComposition开始的,使用 InsertTextAtSelection返回的文本范围。
  3. 当它收到新的输入(如语音或键盘输入)时,应用程序使用 ITextStoreACP::SetTextITextStoreAnchor::SetText更新合成。
  4. 当应用程序确定是时候结束合成时,它会调用 ITfComposition::EndComposition

应用程序应使用文本服务提供的显示属性来随时修改文本的显示,而不仅仅是当合成处于活动状态时。 有关详细信息,请参阅 使用显示属性

如有必要,应用程序可以通过调用 ITfContextOwnerCompositionServices::TerminateComposition来终止合成。