使用 Key Manipulator¶
使用 Key Manipulator 来设置用户可以用来导航您的应用程序的键。例如,您可以覆盖默认的焦点导航键,并使用特定键将焦点设置到一个节点,设置一个键来打开或关闭弹出类型的窗口,或在焦点链中移动焦点。
使用 Key Manipulator 触发器¶
使用 Key Manipulator 触发器在用户按下或释放键时做出反应。例如,您可以覆盖默认的焦点导航键,并使用特定键将焦点设置到一个节点、显示或隐藏一个覆盖层,或在焦点链中移动焦点。请参阅 默认键盘导航键。
Key Manipulator 具有以下触发器:
当用户按下键盘上的特定键时,Key Pressed 触发器被激活。
当用户释放键盘上的特定键时,Key Released 触发器被激活。
当用户取消按键手势时,Key Canceled 触发器被激活。
要使用 Key Manipulator 触发器:
添加并配置一个 Key Manipulator:
选择一个您希望从特定键接收输入的节点。
例如,要隐藏具有特定键的覆盖层,请选择表示该覆盖层的节点。当您隐藏覆盖层时,Kanzi 将焦点移动到先前聚焦的用户界面元素。请参阅 使用焦点。
在 Node Components 按 Alt 并右键单击 Input Manipulators 中,选择 Key Manipulator。
使用 Key Manipulator 将节点设置为对按键输入做出反应。
在 Key Manipulator 集中:
Logical Key 到您希望节点响应的键。
例如,要在用户按下 Enter 键时隐藏叠加层,请将 Logical Key 设置为 Enter。
将 (可选) Key Modifiers 设置为您希望节点响应的修饰键。
例如,要设置节点在用户按下 Ctrl 键和您在 Logical Key 属性中设置的键时做出反应,请将 Key Modifiers 设置为 Control。
在 Node Components 中添加一个 Key Manipulator 触发器。
例如:在 Node Components 按 Alt 并右键单击 Triggers 中,选择 Message Trigger > Key Input > Key Pressed。
要在用户按下键时关闭覆盖层,请在 Key Pressed 触发器中创建一个隐藏覆盖层的动作。请参阅 创建叠加层。
(可选) 要设置 Key Pressed 触发器如何处理按键重复,在触发器中为 Is Repeat 消息参数的值定义一个触发条件。Is Repeat 消息参数指示按键是否是由于用户按住键而导致的重复。
例如,如果您将覆盖设置为在用户按下相同键时同时打开和关闭,请在 Key Pressed 触发器中创建一个 Trigger Condition,并在条件中设置:
A
Type of A 到 Message argument
Message Argument 到 Is Repeat
Operation 到 =
B
Type of B 到 Fixed
Fixed Value 禁用
通过此条件,您可以设置触发器来处理第一次按键。这样,如果应用程序用户按住键不放,覆盖层不会反复打开和关闭。
当用户按下您在 Key Manipulator (Enter) 中设置的键时,Key Pressed 触发器会启动关闭覆盖层的操作,并将焦点设置到先前聚焦的用户界面元素。
使用 API 中的 key manipulator¶
要处理 A 键的按下和释放:
auto keyManipulator = KeyManipulator::create(getDomain());
anyNode->addInputManipulator(keyManipulator);
keyManipulator->setKey(LogicalKey::A);
auto onKeyPressed = [](auto&)
{
// Handle the key press.
};
anyNode->addMessageHandler(KeyManipulator::KeyPressedMessage, onKeyPressed);
auto onKeyReleased = [](auto&)
{
// Handle the key release.
};
anyNode->addMessageHandler(KeyManipulator::KeyReleasedMessage, onKeyReleased);
要将左 Ctrl 修饰键作为按键手势处理:
keyManipulator->setKey(LogicalKey::LeftControl);
要处理由 Shift A 键组成的按键手势:
keyManipulator->setKey(LogicalKey::A, KeyModifier::Shift);
要处理 Left Alt 和 Left Ctrl 修饰键,请将 Left Alt 键设置为修饰键:
keyManipulator->setKey(LogicalKey::LeftControl, KeyModifier::LeftAlt);
按键顺序很重要。先按下 Left Ctrl 然后按下 Left Alt 与先按下 Left Alt,然后按下 Left Ctrl 的按键手势不同。要处理 Left Ctrl + Left Alt 按键手势:
keyManipulator->setKey(LogicalKey::LeftAlt, KeyModifier::LeftControl);
有关详细信息,请参阅 KeyManipulator 类。