InputPointerSource 类

定义

表示注册为报告指针输入并提供指针光标和输入事件处理的对象。

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
继承
Object Platform::Object IInspectable InputObject InputPointerSource
属性

示例

以下示例演示如何使用 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 的指针事件在正常情况下遵循有保证的顺序:

  1. PointerEntered
  2. PointerPressed
  3. PointerMoved
  4. PointerReleased
  5. PointerExited

其中,仅当指针移动或鼠标上的按钮状态更改时,才会引发 PointerMoved 。 所有事件都具有相同的指针 ID。

指针捕获丢失

当输入系统将接触指针路由到其他输入目标时,将引发 PointerCaptureLost。 引发 PointerCaptureLost 时(仅在收到 PointerPressed 后才会发生),不会为该指针引发任何其他事件。 具体而言, 不会引发 PointerReleasedPointerExited ,因此应将 PointerCaptureLost 作为给定指针的有效结束状态进行处理。 下面是包含丢失指针捕获的有效事件序列的示例:

  1. PointerEntered
  2. PointerPressed
  3. PointerMoved
  4. PointerCaptureLost

路由事件

当输入系统将接触指针路由到其他输入目标时,将引发指针路由事件。 与 PointerCaptureLost 不同,路由事件提供了在释放指针之前将接触内指针路由回的可能性。

下面显示了一个有效的事件序列,其中接触指针路由到其他目标,路由回原始 InputPointerSource,然后释放:

  1. PointerEntered
  2. PointerPressed
  3. PointerMoved
  4. PointerRoutedAway
  5. PointerRoutedTo
  6. PointerReleased
  7. PointerExited

下面是一个有效事件序列的示例,其中接触指针路由到其他目标,然后在另一个目标上释放:

  1. PointerEntered
  2. PointerPressed
  3. PointerMoved
  4. PointerRoutedAway
  5. PointerRoutedReleased

注意

引发 PointerRoutedReleased 时,不会为该指针引发其他事件。 具体而言, 不会引发 PointerReleasedPointerExited ,因此应处理 PointerRoutedReleased 作为给定指针的有效结束状态。

还可以接收从其他目标路由的全新接触内指针。 在这种情况下,如果指针尚未被当前 InputPointerSource 看到,则确保 PointerEnteredPointerPressed 事件位于 PointerRoutedTo 之前。 下面是此事件序列的示例:

  1. PointerEntered
  2. PointerPressed
  3. PointerRoutedTo
  4. PointerMoved
  5. PointerReleased
  6. PointerExited

属性

Cursor

获取或设置当鼠标或笔指针位于此 InputPointerSource 的输入目标(VisualWindowId (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

当鼠标滚轮旋转 (轮增量值) 更改时发生。

适用于

另请参阅