Partager via


InputPointerSource Classe

Définition

Représente un objet inscrit pour signaler l’entrée du pointeur et fournir une gestion des événements de pointeur et d’entrée.

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
Héritage
Object Platform::Object IInspectable InputObject InputPointerSource
Attributs

Exemples

L’exemple suivant montre comment configurer un SwapChainPanel avec CreateCoreIndependentInputSource et recevoir un stylet à faible latence et une entrée tactile sur un thread d’arrière-plan via un 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();
}

Cet exemple montre comment configurer l’image du curseur de la main système pour qu’elle s’affiche lorsque le curseur pointe sur un 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);

Remarques

L’espace de coordonnées des événements de pointeur se trouve dans le même espace de coordonnées que l’objet SwapChainPanel .

Ordre des événements

Cas normal

Les événements de pointeur d’InputPointerSource suivent un ordre garanti dans des circonstances normales :

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

PointerMoved n’est déclenché que si le pointeur se déplace ou si le bouton est affiché sur le changement de la souris. Tous les événements ont le même ID de pointeur.

Capture de pointeur perdue

PointerCaptureLost est déclenché lorsqu’un pointeur en contact est acheminé vers une autre cible d’entrée par le système d’entrée. Lorsque PointerCaptureLost est déclenché, ce qui ne se produit qu’après la réception de PointerPressed , aucun événement supplémentaire n’est déclenché pour ce pointeur. Plus précisément, PointerReleased et PointerExited ne seront pas déclenchés. Vous devez donc gérer PointerCaptureLost comme état de fin valide pour un pointeur donné. Voici un exemple d’une séquence d’événements valide qui inclut la perte de capture de pointeur :

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

Événements routés

Les événements routés de pointeur sont déclenchés lorsqu’un pointeur en contact est acheminé vers une autre cible d’entrée par le système d’entrée. Contrairement à PointerCaptureLost, les événements routés offrent la possibilité que le pointeur en contact soit routé avant que le pointeur ne soit libéré.

Ce qui suit montre une séquence valide d’événements où le pointeur en contact est acheminé vers une autre cible, routé vers l’InputPointerSource d’origine, puis libéré :

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

Voici un exemple d’une séquence d’événements valide dans laquelle un pointeur en contact est acheminé vers une autre cible, puis libéré sur l’autre cible :

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

Notes

Lorsque PointerRoutedReleased est déclenché, aucun événement supplémentaire n’est déclenché pour ce pointeur. Plus précisément, PointerReleased et PointerExited ne seront pas déclenchés. Vous devez donc gérer PointerRoutedReleased comme état de fin valide pour un pointeur donné.

Il est également possible de recevoir un tout nouveau pointeur en contact qui a été routé à partir d’une autre cible. Dans ce cas, les événements PointerEntered et PointerPressed sont garantis pour précéder un PointerRoutedTo si le pointeur n’a pas encore été vu par l’InputPointerSource actuel. Voici un exemple de cette séquence d’événements :

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

Propriétés

Cursor

Obtient ou définit le curseur affiché lorsqu’un pointeur de souris ou de stylet se trouve sur la cible d’entrée, un visuel ou un WindowId (HWND) de cet InputPointerSource.

DeviceKinds

Obtient les types d’appareils pris en charge par cette InputPointerSource.

DispatcherQueue

Obtient le DispatcherQueue pour l’objet InputObject.

(Hérité de InputObject)

Méthodes

GetForIsland(ContentIsland)

Récupère un InputPointerSource objet pour le ContentIsland spécifié.

Événements

PointerCaptureLost

Se produit lorsqu’un pointeur en contact avec cette InputPointerSource se déplace vers une autre cible d’entrée.

PointerEntered

Se produit lorsqu’un pointeur se déplace dans les limites de cet InputPointerSource.

PointerExited

Se produit lorsqu’un pointeur sort des limites de cet InputPointerSource.

PointerMoved

Se produit lorsqu’un pointeur se déplace dans les limites de cet InputPointerSource.

PointerPressed

Se produit lorsqu’un bouton de la souris est enfoncé ou qu’un doigt ou un stylet initie le contact avec la surface du numériseur, alors qu’il se trouve dans les limites de cette InputPointerSource.

PointerReleased

Se produit lorsqu’un appareil pointeur qui a précédemment lancé une action Appuyer est libéré (un bouton de souris est relâché, ou un contact tactile ou stylet est levé de la surface du numériseur), alors qu’il se trouve dans les limites de cette InputPointerSource.

PointerRoutedAway

Se produit lorsqu’un pointeur est redirigé vers un autre InputPointerSource (éventuellement dans un processus distinct).

PointerRoutedReleased

Se produit lorsque le pointeur qui a été acheminé vers un autre InputPointerSource est libéré sur cette autre cible d’entrée.

PointerRoutedTo

Se produit lorsqu’un pointeur est routé vers cette InputPointerSource à partir d’une autre cible d’entrée.

PointerWheelChanged

Se produit lorsque la roulette de la souris est pivotée (la valeur du delta de la roue change).

S’applique à

Voir aussi