成分

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

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

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

文本服务

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

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

应用程序

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

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

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

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

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