InputPointerSource 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示注册到报告指针输入的对象,并提供指针游标和输入事件处理。
public ref class InputPointerSource sealed : InputObject
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.Foundation.WindowsAppSDKContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class InputPointerSource final : InputObject
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.Foundation.WindowsAppSDKContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class InputPointerSource : InputObject
Public NotInheritable Class InputPointerSource
Inherits InputObject
- 继承
- 属性
示例
以下示例演示如何使用 CreateCoreIndependentInputSource 配置 SwapChainPanel,并通过 DispatcherQueueController在后台线程上接收低延迟笔和触摸输入。
void SetupBackgroundPenInput(SwapChainPanel swapChainPanel)
{
m_dispatcherQueueController = DispatcherQueueController::CreateOnDedicatedThread();
m_dispatcherQueueController.DispatcherQueue().TryEnqueue([this] {
InputPointerSourceDeviceKinds deviceKind = (InputPointerSourceDeviceKinds)(
Microsoft::UI::Input::InputPointerSourceDeviceKinds::Touch |
Microsoft::UI::Input::InputPointerSourceDeviceKinds::Pen);
m_coreInput = swapChainPanel().CreateCoreIndependentInputSource(deviceKind);
m_coreInput.PointerMoved({ this, &DirectXPage::SwapChainPanel_OnPointerMoved });
});
}
void DirectXPage::SwapChainPanel_OnPointerPressed(InputPointerSource const& sender, Microsoft::UI::Input::PointerEventArgs const& e)
{
// When the pointer is pressed begin tracking the pointer movement.
m_main->StartTracking();
}
此示例演示如何配置系统手游标图像,以在光标悬停在 SwapChainPanel 上时显示:
InputPointerSourceDeviceKinds deviceKind = (InputPointerSourceDeviceKinds)(
Microsoft::UI::Input::InputPointerSourceDeviceKinds::Touch |
Microsoft::UI::Input::InputPointerSourceDeviceKinds::Mouse |
Microsoft::UI::Input::InputPointerSourceDeviceKinds::Pen);
m_coreInput = swapChainPanel().CreateCoreIndependentInputSource(deviceKind);
m_coreInput.InputCursor = InputSystemCursor.Create(InputSystemCursorShape.Hand);
注解
指针事件的坐标空间与 SwapChainPanel 对象位于同一坐标空间中。
事件顺序
普通情况
InputPointerSource 的指针事件遵循正常情况下的保证顺序:
- PointerEntered
- PointerPressed
- PointerMoved
- PointerReleased
- PointerExited
仅当指针移动或鼠标更改上的按钮状态时,才会引发 PointerMoved。 所有事件都具有相同的指针 ID。
指针捕获丢失
当输入系统将接触内指针路由到其他输入目标时,PointerCaptureLost 引发。 引发 PointerCaptureLost 时,只有在收到 pointerPressed
- PointerEntered
- PointerPressed
- PointerMoved
- PointerCaptureLost
路由事件
当输入系统将接触内指针路由到其他输入目标时,将引发指针路由事件。 与 PointerCaptureLost 不同,路由事件提供了在释放指针之前将接触内指针路由回的可能性。
下面显示了一系列有效的事件,其中,联系人中指针被路由到其他目标,路由回原始 InputPointerSource,然后释放:
- PointerEntered
- PointerPressed
- PointerMoved
- PointerRoutedAway
- PointerRoutedTo
- PointerReleased
- PointerExited
下面是一个有效的事件序列示例,其中联系人中指针被路由到其他目标,然后在另一个目标上释放:
- PointerEntered
- PointerPressed
- PointerMoved
- PointerRoutedAway
- PointerRoutedReleased
注意
引发 PointerRoutedReleased 时,不会为该指针引发任何其他事件。 具体而言,不会引发 PointerReleased 和 PointerExited,因此应将 PointerRoutedReleased 作为给定指针的有效结束状态进行处理。
还可以接收从其他目标路由的全新接触内指针。 在这种情况下,如果当前 InputPointerSource 尚未看到指针,则 PointerEntered 和 PointerPressed 事件保证位于 PointerRoutedTo 之前。 下面是此事件序列的示例:
- PointerEntered
- PointerPressed
- PointerRoutedTo
- PointerMoved
- PointerReleased
- PointerExited
属性
Cursor |
获取或设置当鼠标或笔指针位于输入目标、Visual 或 WindowId(HWND)上时显示的光标,该 InputPointerSource。 |
DeviceKinds |
获取此 InputPointerSource支持的设备类型。 |
DispatcherQueue |
获取 InputObject 的 DispatcherQueue。 (继承自 InputObject) |
方法
GetForIsland(ContentIsland) |
检索指定 ContentIsland的 InputPointerSource 对象。 |
事件
PointerCaptureLost |
当与此 InputPointerSource 联系的指针 移动到另一个输入目标时发生。 |
PointerEntered |
当指针移动到此 InputPointerSource的边界时发生。 |
PointerExited |
当指针移出此 InputPointerSource的边界时发生。 |
PointerMoved |
当指针在此 InputPointerSource的边界内移动时发生。 |
PointerPressed |
按下鼠标按钮时发生,或者手指或笔启动与数字化器图面的接触,而在此 InputPointerSource的边界内。 |
PointerReleased |
当先前启动的按下操作的指针设备释放(松开鼠标按钮或从数字化器图面上抬起触摸或笔接触),同时在此 InputPointerSource的边界内发生。 |
PointerRoutedAway |
当指针重定向到另一个 InputPointerSource(可能位于单独的进程中)时发生。 |
PointerRoutedReleased |
在其他输入目标上释放路由到其他 InputPointerSource 的指针时发生。 |
PointerRoutedTo |
当指针从其他输入目标路由到此 InputPointerSource 时发生。 |
PointerWheelChanged |
旋转鼠标滚轮时发生(滚轮增量值更改)。 |