Freigeben über


InputPointerSource Klasse

Definition

Stellt ein Objekt dar, das für die Berichtszeigereingabe registriert ist und Zeigercursor und Eingabeereignisbehandlung bereitstellt.

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
Vererbung
Object Platform::Object IInspectable InputObject InputPointerSource
Attribute

Beispiele

Das folgende Beispiel zeigt, wie Sie ein SwapChainPanel mit CreateCoreIndependentInputSource konfigurieren und Stift- und Toucheingaben mit niedriger Latenz für einen Hintergrundthread über einen DispatcherQueueController empfangen.

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();
}

In diesem Beispiel wird gezeigt, wie Sie das Bild des Systemhandcursors so konfigurieren, dass es angezeigt wird, wenn der Cursor über ein SwapChainPanel bewegt wird:

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);

Hinweise

Der Koordinatenbereich für die Zeigerereignisse befindet sich im gleichen Koordinatenbereich wie das SwapChainPanel-Objekt .

Ereignisreihenfolge

Normalfall

Die Zeigerereignisse von InputPointerSource folgen unter normalen Umständen einer garantierten Reihenfolge:

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

Wobei PointerMoved nur ausgelöst wird, wenn sich der Zeiger bewegt oder die Schaltflächenzustände auf der Maus geändert werden. Alle Ereignisse weisen dieselbe Zeiger-ID auf.

Zeigererfassung verloren

PointerCaptureLost wird ausgelöst, wenn ein Kontaktzeiger vom Eingabesystem an ein anderes Eingabeziel weitergeleitet wird. Wenn PointerCaptureLost ausgelöst wird, was erst geschieht, nachdem PointerPressed empfangen wurde, werden für diesen Zeiger keine zusätzlichen Ereignisse ausgelöst. Insbesondere werden PointerReleased und PointerExited nicht ausgelöst, sodass Sie PointerCaptureLost als gültigen Endzustand für einen bestimmten Zeiger behandeln sollten. Hier sehen Sie ein Beispiel für eine gültige Abfolge von Ereignissen, die eine verlustreiche Zeigererfassung umfasst:

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

Routingereignisse

Zeigerroutenereignisse werden ausgelöst, wenn ein Kontaktzeiger vom Eingabesystem an ein anderes Eingabeziel weitergeleitet wird. Im Gegensatz zu PointerCaptureLost bieten die Routingereignisse die Möglichkeit, dass der Kontaktzeiger zurückgeleitet wird, bevor der Zeiger losgelassen wird.

Im Folgenden wird eine gültige Abfolge von Ereignissen gezeigt, bei denen der Kontaktzeiger an ein anderes Ziel weitergeleitet, an die ursprüngliche InputPointerSource zurückgeleitet und dann freigegeben wird:

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

Hier sehen Sie ein Beispiel für eine gültige Sequenz von Ereignissen, bei der ein Kontaktzeiger an ein anderes Ziel weitergeleitet und dann für das andere Ziel freigegeben wird:

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

Hinweis

Wenn PointerRoutedReleased ausgelöst wird, werden für diesen Zeiger keine zusätzlichen Ereignisse ausgelöst. Insbesondere werden PointerReleased und PointerExited nicht ausgelöst, sodass Sie PointerRoutedReleased als gültigen Endzustand für einen bestimmten Zeiger behandeln sollten.

Es ist auch möglich, einen brandneuen Kontaktzeiger zu erhalten, der von einem anderen Ziel weitergeleitet wurde. In diesem Fall sind die PointerEntered - und PointerPressed-Ereignisse garantiert einem PointerRoutedTo vorangestellt, wenn der Zeiger von der aktuellen InputPointerSource noch nicht erkannt wurde. Im Folgenden finden Sie ein Beispiel für diese Ereignissequenz:

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

Eigenschaften

Cursor

Ruft den Cursor ab, der angezeigt wird, wenn sich ein Maus- oder Stiftzeiger über dem Eingabeziel, einem Visual oder einer WindowId (HWND) dieser InputPointerSource befindet, oder legt diesen fest.

DeviceKinds

Ruft die gerätetypen ab, die von dieser InputPointerSource unterstützt werden.

DispatcherQueue

Ruft die DispatcherQueue für das InputObject ab.

(Geerbt von InputObject)

Methoden

GetForIsland(ContentIsland)

Ruft ein InputPointerSource -Objekt für das angegebene ContentIsland ab.

Ereignisse

PointerCaptureLost

Tritt auf, wenn ein Zeiger in Kontakt mit dieser InputPointerSource zu einem anderen Eingabeziel verschoben wird.

PointerEntered

Tritt auf, wenn ein Zeiger in die Grenzen dieser InputPointerSource bewegt wird.

PointerExited

Tritt auf, wenn sich ein Zeiger außerhalb der Grenzen dieser InputPointerSource bewegt.

PointerMoved

Tritt auf, wenn sich ein Zeiger innerhalb der Grenzen dieser InputPointerSource bewegt.

PointerPressed

Tritt auf, wenn eine Maustaste gedrückt wird oder ein Finger oder Stift den Kontakt mit der Digitalisiereroberfläche initiiert, während sich die Grenzen dieser InputPointerSource-Schnittstelle bewegen.

PointerReleased

Tritt auf, wenn ein Zeigergerät, das zuvor eine Drücken-Aktion initiiert hat, losgelassen wird (eine Maustaste wird losgelassen, oder ein Touch- oder Stiftkontakt wird von der Digitalisiereroberfläche angehoben), während es sich innerhalb der Grenzen dieser InputPointerSource befindet.

PointerRoutedAway

Tritt auf, wenn ein Zeiger an eine andere InputPointerSource umgeleitet wird (möglicherweise in einem separaten Prozess).

PointerRoutedReleased

Tritt auf, wenn der Zeiger, der an eine andere InputPointerSource weitergeleitet wurde, auf diesem anderen Eingabeziel veröffentlicht wird.

PointerRoutedTo

Tritt auf, wenn ein Zeiger von einem anderen Eingabeziel an diese InputPointerSource weitergeleitet wird.

PointerWheelChanged

Tritt auf, wenn das Mausrad gedreht wird (der Raddeltawert ändert sich).

Gilt für:

Weitere Informationen