Share via


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의 입력 대상, 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

마우스 휠이 회전될 때 발생합니다(휠 델타 값이 변경됨).

적용 대상

추가 정보