IInputPanelInvocationConfiguration::RequireTouchInEditControl 方法 (inputpanelconfiguration.h)
在调用触摸键盘之前,需要显式用户点击编辑字段。
语法
HRESULT RequireTouchInEditControl();
返回值
RequireTouchInEditControl 方法始终返回S_OK。
注解
调用 RequireTouchInEditControl 方法时,所有将来的焦点更改都需要在触摸键盘调用之前在编辑字段中显式点击。 可以多次调用 RequireTouchInEditControl 方法,但无法撤消设置。
此设置适用于发生在调用它的进程中运行的窗口的任何焦点事件。 RequireTouchInEditControl 方法不会影响另一个进程中拥有的窗口,该进程具有调用 RequireTouchInEditControl 的当前进程的所有权链。
RequireTouchInEditControl 方法始终返回S_OK。 如果使用此 API,则 IsUIBusy 属性不起作用。 这两种交互模型本质上是互斥的。
以下代码演示如何调用 RequireTouchInEditControl 方法。
#include <inputpanelconfiguration.h>
#include <inputpanelconfiguration_i.c>
IInputPanelInvocationConfiguration *pInputPanelInvocationConfiguration;
CoCreateInstance(CLSID_InputPanelConfiguration, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pInputPanelInvocationConfiguration));
pInputPanelInvocationConfiguration->RequireTouchInEditControl();
注意 在应用完成绘制 UI 之前调用 Release 可能会导致未定义的行为。 如果触摸键盘尚未运行,则调用 Release 可能会导致卸载 tiptsf.dll,因为不再引用 dll。 如果发生这种情况, 则 RequireTouchInEditControl 方法设置的状态将丢失。
将 IsUIBusy 设置为 True 时,触摸键盘不会根据应用中的焦点更改来更改视觉状态。 它仍然能够基于替代用户操作更改视觉状态,例如使用物理键盘或手动消除。
将 IsUIBusy 设置为 False 时,触摸键盘会恢复其默认行为,并同步查询具有焦点的控件。
以下代码演示如何注册 IsUIBusy 自定义 UI 自动化属性。
/* 03391bea-6681-474b-955c-60f664397ac6 */
DEFINE_GUID(
GUID_UIBusy,
0x03391bea, 0x6681, 0x474b, 0x95, 0x5c, 0x60, 0xf6, 0x64, 0x39, 0x7a, 0xc6);
UIAutomationPropertyInfo customPropertyInfo =
{
GUID_UIBusy,
L"IsUIBusy",
UIAutomationType_Bool
};
CComPtr<IUIAutomationRegistrar> spRegistrar;
hr = spRegistrar.CoCreateInstance(
CLSID_CUIAutomationRegistrar,
nullptr,
CLSCTX_INPROC_SERVER);
if (SUCCEEDED(hr))
{
PATTERNID customPropertyId;
hr = spRegistrar->RegisterProperty(&customPropertyInfo, &customPropertyId);
}
要求
最低受支持的客户端 | Windows 8 |
最低受支持的服务器 | Windows Server 2012 |
目标平台 | Windows |
标头 | inputpanelconfiguration.h |