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 后才会发生),不会为该指针引发任何其他事件。 具体而言, 不会引发 PointerReleased 和 PointerExited ,因此应将 PointerCaptureLost 作为给定指针的有效结束状态进行处理。 下面是包含丢失指针捕获的有效事件序列的示例:
- 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 |
获取或设置当鼠标或笔指针位于此 InputPointerSource 的输入目标(Visual 或 WindowId (HWND) )上时显示的光标。 |
DeviceKinds |
获取此 InputPointerSource 支持的设备类型。 |
DispatcherQueue |
获取 InputObject 的 DispatcherQueue 。 (继承自 InputObject) |
方法
GetForIsland(ContentIsland) |
检索 InputPointerSource 指定 ContentIsland 的 对象。 |
事件
PointerCaptureLost |
当与此 InputPointerSource 接触的指针移动到另一个输入目标时发生。 |
PointerEntered |
当指针移动到此 InputPointerSource 的边界时发生。 |
PointerExited |
当指针移出此 InputPointerSource 的边界时发生。 |
PointerMoved |
当指针在此 InputPointerSource 的边界内移动时发生。 |
PointerPressed |
当按下鼠标按钮或手指或笔启动与数字化器表面接触时发生,同时在此 InputPointerSource 的边界内。 |
PointerReleased |
当之前启动按下操作的指针设备释放 (鼠标按钮松开,或者触摸或笔接触从数字化器表面) ,同时在此 InputPointerSource 的边界内时发生。 |
PointerRoutedAway |
当指针重定向到另一个 InputPointerSource (可能在单独的进程中) 时发生。 |
PointerRoutedReleased |
当路由到其他 InputPointerSource 的指针在该其他输入目标上释放时发生。 |
PointerRoutedTo |
当指针从不同的输入目标路由到此 InputPointerSource 时发生。 |
PointerWheelChanged |
当鼠标滚轮旋转 (轮增量值) 更改时发生。 |