无 UI 模式概述

如何创建 UILessMode

创建无 UI 线程: 应用程序可以通过 ITfThreadMgrEx::ActivateEx 使用 ITF_AE_UIELEMENTENABLEDONLY 使 UI 少线程。 使用此标志激活 ThreadMgr 时,线程上仅激活可以控制其 UI 元素的 TP。 应用程序需要实现 ITfUIElementSink 接口,并将接口建议为线程管理器。 当 TIP 显示其 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 想要在不希望允许 TIP UI 的应用程序(如游戏应用程序或全屏应用程序)下运行,则应支持 UI 较少模式。 若要使 UI 不太了解,TIP 需要实现 ITfTextInputProcessorEx 接口。 如果未实现此接口,则不会在 UI 少模式线程下激活 TIP。 此外,TIP 必须先调用 ITFUIElementMgr::BeginUIElement ,然后才能在屏幕上显示可见 UI。 此方法调用 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 模式并开始自行绘制一些 UI,方法是使用 FALSE 调用 ITfUIElement::Show 来隐藏 TIP 的所有 UI。 然后,TIP 可以采用某些选项之一。 1) TIP 可以将 UIElement 移动到“隐藏”状态并开始生成 UpdateUIElement。 2) TIP 可以完成 UIElement,因为 UI 元素不支持隐藏状态,Tip 调用 EndUIElement () 来完成它。

预定义 UI 元素

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

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

UILessMode 的流程图

显示 U I LessMode 流程图的示意图。

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

显示 T I P 何时调用“ITUIElementMgr::BeginUIElement () ”和“Application 的 UIElementSink 的 BeginUIElement”的示意图。显示应用程序在 *pbShow 中返回 FALSE 的关系图。uilessmode 流程图

候选列表 UIElement

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

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