无 UI 模式概述

如何创建 UILessMode

使无 UI 线程: 应用程序可以通过 ITfThreadMgrEx::ActivateEx 和 ITF_AE_UIELEMENTENABLEDONLY 使 UI 减少线程。 使用此标志激活 ThreadMgr 时,线程上仅激活可以控制其 UI 元素的 TIP。 应用程序需要实现 ITfUIElementSink 接口,并建议接口进入线程管理器。 提示显示其 UI 时调用 ITfUIElementSink::BeginUIElement。 当应用程序不想绘制时,应用程序可以在 pbShow 参数中返回 TRUE ,以允许 TIP 显示 TIP 的原始 UI。 如果应用程序不允许 TIP 的 UI,则可以在 pbShow 中返回 FALSE , (请参阅下图) 。 应用程序可以通过从 pElement 参数获取一些信息来自行绘制 UI。 它可以是候选列表、语言栏项或 TIP 的自定义 UI。 应用程序可以通过 QIing ITfUIElement 接口了解 UI 的类型。 更改 UI 后,将调用 ITfUIElementSink::UpdateUIElement 。 应用程序可以比较 pElement-GetGUID> () 中的 GUID,以确定该元素当前是否由应用程序绘制。

创建无 UI 感知提示: 如果提示希望在不希望允许 TIP 的 UI(如游戏应用程序或全屏应用程序)下运行,则提示应支持 UI 更少模式。 若要不太了解 UI,TIP 需要实现 ITfTextInputProcessorEx 接口。 如果未实现此接口,则不会在 UI 下激活 TIP 模式线程。 此外,TIP 必须在显示屏幕可见 UI 之前调用 ITFUIElementMgr::BeginUIElement 。 此方法调用 ITfUIElementSink 以通知应用程序。 应用程序将决定是否可以显示。 当 TIP 调用 BeginUIElement () 时,TIP 需要具有相应 UI 的 ITfUIElement 接口。 应用程序将 QI 接口以获取另一个特定于 UI 的接口,以检索详细信息以绘制 UI。 系统预定义 ITfCandidateListUIElementITfReadingInformationUIElement for TIP。 当 TIP 想要在 UI 较少模式线程下显示候选列表时,TIP 必须创建 ITfCandidateListUIElement 接口的实例并调用 ITFUIElementMgr::BeginUIElement。 调用 ITfTextInputProcessorEx::ActivateEx 时,TIP 已经知道线程的 UI 更少,因此它可以消除额外的自定义 UI。 但是,当然,它可以实现自己的接口,可以对其进行 QI 访问并尝试发出通知。 因此,TIP 和 appliITfUIElementcation 可以协商 TIP 自定义 UI。

UIElement 支持提示

支持 UIElement 的 TIP 必须按GUID_TFCAT_TIPCAP_UIELEMENTENABLED进行分类。 GUID_TFCAT_TIPCAP_UIELEMENTENABLED中的 TIP 必须使用 ITfUIElementMgr 显示任何 UI,以便应用程序可以控制 UI 的可见性。

显示/隐藏 UIElement 的状态: 显示/隐藏 由 ITfUIElement::ShowITfUIElement::IsShown 方法指示的状态为实际可见状态。 它与 UIElement 的可用性无关。 当显示状态存在时,UIElement 应始终可用。 显示状态可从应用程序控制。 应用程序可能会突然进入无 UI 模式,并通过调用 ITfUIElement::Show with FALSE 来隐藏 TIP 的所有 UI,从而自行开始绘制某些 UI。 然后 TIP 可以采用一些选项之一。 1) TIP 可以将 UIElement 移动到“隐藏”状态并开始生成 UpdateUIElement。 2) TIP 可以完成 UIElement,因为 UI 元素不支持隐藏状态,提示调用 EndUIElement () 来完成它。

预定义的 UI 元素

候选列表: 候选列表是 EA 输入的主要 UI 元素之一。 此 UI 元素提供候选列表和用于绘制的候选字符串的相应数目。

阅读信息窗口 阅读信息窗口对于中文键盘输入很常见。 它具有无法作为合成字符串插入到文档中的阶段。 一些中文输入处理器打开一个小的阅读信息窗口,显示阅读、拼音或键入信息。

UILessMode 的流程图

Diagram that shows the U I LessMode flow chart.

ITfUIElementMgr::BeginUIElement 接收 TRUE 后,TIP 不必为 UIElement 调用 UpdateUIElement。 但是 TIP 需要调用 EndUIElement () ,以便 ITfUIElementMgr 和应用程序可以跟踪 UIElement 的状态。 TIP 必须在 BeginUIElement () 在 *pbShow 中返回 FALSE 后调用 UpdateUIElement () 。 想要绘制 UI 的应用程序不会检查 BeginUIElement () 中的内容,它只返回 BeginUIElement () 中的显示状态,并开始检查 UpdateUIElement () 中的内容。 例如,候选列表 UIElement 的更新标志在第一个 UpdateUIElement () 上具有所有位。 这意味着 UIElement 的内容不必在 BeginUIElement () 上准备就绪。

Diagram that shows when the T I P calls 'ITUIElementMgr::BeginUIElement()' and 'BeginUIElement of Application's UIElementSink' is called.Diagram that shows the application returns FALSE in *pbShow.uilessmode flow chart

候选列表 UIElement

关于 PageIndex: 绘制候选列表的应用程序将在设置) (TF_CLUIE_STRING更改列表内容时计算每页的字符串数。 当候选列表可用于 UILess 模式时,更改页面索引并不好。 这意味着,TIP 的候选列表在将所选内容移动到下一页时应执行分页,而不是滚动。 如果滚动在选择移动时发生,则更改页面索引,并且应用程序需要重新计算页面索引。 TIP 可能无法预期结果。

如果候选列表没有选择,则 No Selection:ITfCandidateListUIElement::GetSelection 将返回S_FALSE。 第一个参数的返回值无效。