Поделиться через


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
Атрибуты

Примеры

В следующем примере показано, как настроить SwapChainPanel с помощью CreateCoreIndependentInputSource и получить перо с низкой задержкой и ввод сенсорного ввода в фоновом потоке через 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

Where PointerMoved будет вызываться только при перемещении указателя или изменении состояния кнопки на мыши. Все события имеют одинаковый идентификатор указателя.

Запись указателя потеряна

PointerCaptureLost возникает, когда система входных данных направляет контактный указатель на другой целевой объект ввода. При вызове PointerCaptureLost, что происходит только после получения pointerPressed , дополнительные события для этого указателя не будут вызываться. В частности, pointerReleased и PointerExited не будут вызываться, поэтому следует обрабатывать 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 дополнительные события для этого указателя не будут вызываться. В частности, pointerReleased и PointerExited не будут вызываться, поэтому следует обрабатывать PointerRoutedReleased как допустимое конечное состояние для данного указателя.

Кроме того, можно получить новый контактный указатель, который был перенаправлен из другого целевого объекта. В этом случае события PointerEntered и PointerPressed гарантированно предшествуют PointerRoutedTo , если текущий объект InputPointerSource еще не видел указатель. Ниже приведен пример этой последовательности событий:

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

Свойства

Cursor

Возвращает или задает курсор, отображаемый, когда указатель мыши или пера находится на целевом объекте ввода , Visual или WindowId (HWND) данного объекта InputPointerSource.

DeviceKinds

Возвращает типы устройств, поддерживаемые этим inputPointerSource.

DispatcherQueue

Возвращает DispatcherQueue для объекта InputObject.

(Унаследовано от InputObject)

Методы

GetForIsland(ContentIsland)

Извлекает InputPointerSource объект для указанного ContentIsland.

События

PointerCaptureLost

Происходит, когда указатель в контакте с этим InputPointerSource перемещается в другой целевой объект входных данных.

PointerEntered

Происходит при перемещении указателя в границы этого объекта InputPointerSource.

PointerExited

Происходит при перемещении указателя за пределы этого объекта InputPointerSource.

PointerMoved

Происходит при перемещении указателя в пределах границ этого объекта InputPointerSource.

PointerPressed

Происходит при нажатии кнопки мыши или при контакте пальца или пера с поверхностью дигитайзера в пределах этого объекта InputPointerSource.

PointerReleased

Происходит при освобождении устройства указателя, которое ранее инициировало действие нажатия (отпущена кнопка мыши или контакт сенсорного ввода или пера с поверхности дигитайзера), находясь в пределах этого объекта InputPointerSource.

PointerRoutedAway

Происходит при перенаправлении указателя на другой объект InputPointerSource (возможно, в отдельном процессе).

PointerRoutedReleased

Происходит при освобождении указателя, перенаправленного в другой объект InputPointerSource , на этом другом целевом объекте ввода.

PointerRoutedTo

Происходит при перенаправлении указателя на этот объект InputPointerSource из другого целевого объекта ввода.

PointerWheelChanged

Происходит при повороте колесика мыши (изменяется разностное значение колесика).

Применяется к

См. также раздел