Share via


InputPointerSource Classe

Definição

Representa um objeto que é registrado para relatar a entrada do ponteiro e fornecer o cursor de ponteiro e a manipulação de eventos de entrada.

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
Herança
Object Platform::Object IInspectable InputObject InputPointerSource
Atributos

Exemplos

O exemplo a seguir mostra como configurar um SwapChainPanel com CreateCoreIndependentInputSource e receber a caneta de baixa latência e a entrada por toque em um thread em segundo plano por meio de um 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();
}

Este exemplo mostra como configurar a imagem do cursor de mão do sistema a ser exibida quando o cursor passar o mouse sobre um 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);

Comentários

O espaço de coordenadas para os eventos de ponteiro está no mesmo espaço de coordenadas que o objeto SwapChainPanel .

Ordem do evento

Caso Normal

Os eventos de ponteiro de InputPointerSource seguem uma ordem garantida em circunstâncias normais:

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

Onde PointerMoved só será gerado se o ponteiro se mover ou os estados do botão no mouse forem alterados. Todos os eventos têm a mesma ID de ponteiro.

Captura de ponteiro perdida

PointerCaptureLost é gerado quando um ponteiro em contato é roteado para um destino de entrada diferente pelo sistema de entrada. Quando PointerCaptureLost é gerado, o que só acontecerá depois que PointerPressed for recebido, nenhum evento adicional será gerado para esse ponteiro. Especificamente, PointerReleased e PointerExited não serão gerados, portanto, você deve manipular PointerCaptureLost como um estado final válido para um determinado ponteiro. Aqui está um exemplo de uma sequência válida de eventos que inclui a perda de captura de ponteiro:

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

Eventos roteados

Os eventos roteado de ponteiro são gerados quando um ponteiro em contato é roteado para um destino de entrada diferente pelo sistema de entrada. Ao contrário de PointerCaptureLost, os eventos roteado fornecem a possibilidade do ponteiro em contato ser roteado de volta antes que o ponteiro seja liberado.

O seguinte mostra uma sequência válida de eventos em que o ponteiro em contato é roteado para um destino diferente, roteado de volta para o InputPointerSource original e liberado:

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

Aqui está um exemplo de uma sequência válida de eventos em que um ponteiro em contato é roteado para um destino diferente e liberado no outro destino:

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

Observação

Quando PointerRoutedReleased for gerado, nenhum evento adicional será gerado para esse ponteiro. Especificamente, PointerReleased e PointerExited não serão gerados, portanto, você deve manipular PointerRoutedReleased como um estado final válido para um determinado ponteiro.

Também é possível receber um novo ponteiro em contato que foi roteado de um destino diferente. Nesse caso, os eventos PointerEntered e PointerPressed têm a garantia de preceder um PointerRoutedTo se o ponteiro ainda não tiver sido visto pelo InputPointerSource atual. Veja a seguir um exemplo dessa sequência de eventos:

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

Propriedades

Cursor

Obtém ou define o cursor exibido quando um ponteiro de mouse ou caneta está sobre o destino de entrada, um Visual ou WindowId (HWND), deste InputPointerSource.

DeviceKinds

Obtém os tipos de dispositivo compatíveis com este InputPointerSource.

DispatcherQueue

Obtém o DispatcherQueue para o InputObject.

(Herdado de InputObject)

Métodos

GetForIsland(ContentIsland)

Recupera um InputPointerSource objeto para o ContentIsland especificado.

Eventos

PointerCaptureLost

Ocorre quando um ponteiro em contato com esse InputPointerSource se move para outro destino de entrada.

PointerEntered

Ocorre quando um ponteiro se move para os limites deste InputPointerSource.

PointerExited

Ocorre quando um ponteiro sai dos limites deste InputPointerSource.

PointerMoved

Ocorre quando um ponteiro se move dentro dos limites deste InputPointerSource.

PointerPressed

Ocorre quando um botão do mouse é pressionado ou um dedo ou caneta inicia o contato com a superfície do digitalizador, enquanto está dentro dos limites deste InputPointerSource.

PointerReleased

Ocorre quando um dispositivo de ponteiro que iniciou anteriormente uma ação Pressionar é liberado (um botão do mouse é liberado ou um contato de toque ou caneta é retirado da superfície do digitalizador), enquanto está dentro dos limites deste InputPointerSource.

PointerRoutedAway

Ocorre quando um ponteiro é redirecionado para outro InputPointerSource (possivelmente em um processo separado).

PointerRoutedReleased

Ocorre quando o ponteiro s que foi roteado para um InputPointerSource diferente é liberado nesse outro destino de entrada.

PointerRoutedTo

Ocorre quando um ponteiro é roteado para esse InputPointerSource de um destino de entrada diferente.

PointerWheelChanged

Ocorre quando a roda do mouse é girada (o valor delta da roda é alterado).

Aplica-se a

Confira também