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

获取或设置当鼠标或笔指针位于输入目标、VisualWindowId(HWND)上时显示的光标,该 InputPointerSource

DeviceKinds

获取此 InputPointerSource支持的设备类型。

DispatcherQueue

获取 InputObject 的 DispatcherQueue

(继承自 InputObject)

方法

GetForIsland(ContentIsland)

检索指定 ContentIslandInputPointerSource 对象。

事件

PointerCaptureLost

当与此 InputPointerSource 联系的指针 移动到另一个输入目标时发生。

PointerEntered

当指针移动到此 InputPointerSource的边界时发生。

PointerExited

当指针移出此 InputPointerSource的边界时发生。

PointerMoved

当指针在此 InputPointerSource的边界内移动时发生。

PointerPressed

按下鼠标按钮时发生,或者手指或笔启动与数字化器图面的接触,而在此 InputPointerSource的边界内。

PointerReleased

当先前启动的按下操作的指针设备释放(松开鼠标按钮或从数字化器图面上抬起触摸或笔接触),同时在此 InputPointerSource的边界内发生。

PointerRoutedAway

当指针重定向到另一个 InputPointerSource(可能位于单独的进程中)时发生。

PointerRoutedReleased

在其他输入目标上释放路由到其他 InputPointerSource 的指针时发生。

PointerRoutedTo

当指针从其他输入目标路由到此 InputPointerSource 时发生。

PointerWheelChanged

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

适用于

另请参阅