Freigeben über


CoreIndependentInputSource Klasse

Definition

Surfaces-Kerneingabe-APIs für Interoperationsszenarien.

public ref class CoreIndependentInputSource sealed : ICoreInputSourceBase, ICorePointerInputSource
public ref class CoreIndependentInputSource sealed : ICoreInputSourceBase, ICorePointerInputSource2
public ref class CoreIndependentInputSource sealed : ICoreInputSourceBase, ICorePointerInputSource2, ICorePointerRedirector
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class CoreIndependentInputSource final : ICoreInputSourceBase, ICorePointerInputSource
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class CoreIndependentInputSource final : ICoreInputSourceBase, ICorePointerInputSource2
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class CoreIndependentInputSource final : ICoreInputSourceBase, ICorePointerInputSource2, ICorePointerRedirector
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class CoreIndependentInputSource : ICoreInputSourceBase, ICorePointerInputSource
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class CoreIndependentInputSource : ICoreInputSourceBase, ICorePointerInputSource2
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class CoreIndependentInputSource : ICoreInputSourceBase, ICorePointerInputSource2, ICorePointerRedirector
Public NotInheritable Class CoreIndependentInputSource
Implements ICoreInputSourceBase, ICorePointerInputSource
Public NotInheritable Class CoreIndependentInputSource
Implements ICoreInputSourceBase, ICorePointerInputSource2
Public NotInheritable Class CoreIndependentInputSource
Implements ICoreInputSourceBase, ICorePointerInputSource2, ICorePointerRedirector
Vererbung
Object Platform::Object IInspectable CoreIndependentInputSource
Attribute
Implementiert

Windows-Anforderungen

Gerätefamilie
Windows 10 (eingeführt in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (eingeführt in v1.0)

Beispiele

Initialisieren der unabhängigen Eingabe.

// MainPage.cpp
#include "pch.h"
#include "MainPage.h"
#include <winrt/Windows.System.Threading.h>
#include <winrt/Windows.UI.Core.h>
#include <winrt/Windows.UI.Xaml.Controls.h>

using namespace winrt;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Controls;

Windows::Foundation::IAsyncAction m_inputLoopWorker;
...
    // Create a task to register for independent input and begin processing input messages.
    Windows::System::Threading::WorkItemHandler workItemHandler([this](Windows::Foundation::IAsyncAction const& /* action */)
    {
        // The CoreIndependentInputSource will raise pointer events for the specified device types on whichever thread it's created on.
        Windows::UI::Core::CoreIndependentInputSource coreInput{
            MySwapChainPanel().CreateCoreIndependentInputSource(
                Windows::UI::Core::CoreInputDeviceTypes::Mouse |
                Windows::UI::Core::CoreInputDeviceTypes::Touch |
                Windows::UI::Core::CoreInputDeviceTypes::Pen)
        };

        // Register for pointer events, which will be raised on the background thread.
        coreInput.PointerPressed({ this, &MainPage::SCP_OnPointerPressed });
        coreInput.PointerMoved({ this, &MainPage::SCP_OnPointerMoved });
        coreInput.PointerReleased({ this, &MainPage::SCP_OnPointerReleased });

        // Begin processing input messages as they're delivered.
        coreInput.Dispatcher().ProcessEvents(Windows::UI::Core::CoreProcessEventsOption::ProcessUntilQuit);
    });

    // Run task on a dedicated high priority background thread.
    m_inputLoopWorker = Windows::System::Threading::ThreadPool::RunAsync(
        workItemHandler, Windows::System::Threading::WorkItemPriority::High,
        Windows::System::Threading::WorkItemOptions::TimeSliced);
...
void MainPage::SCP_OnPointerPressed(Windows::Foundation::IInspectable const& /* sender */,
    Windows::UI::Core::PointerEventArgs const& /* args */) {}
void MainPage::SCP_OnPointerMoved(Windows::Foundation::IInspectable const& /* sender */,
    Windows::UI::Core::PointerEventArgs const& /* args */) {}
void MainPage::SCP_OnPointerReleased(Windows::Foundation::IInspectable const& /* sender */,
    Windows::UI::Core::PointerEventArgs const& /* args */) {}
// Create a task to register for independent input and begin processing input messages.
auto workItemHandler = ref new WorkItemHandler([this] (IAsyncAction ^)
{
   // The CoreIndependentInputSource will raise pointer events for the specified device types on whichever thread it's created on.
   CoreIndependentInputSource^ coreInput = CreateCoreIndependentInputSource(
      Windows::UI::Core::CoreInputDeviceTypes::Mouse |
      Windows::UI::Core::CoreInputDeviceTypes::Touch |
      Windows::UI::Core::CoreInputDeviceTypes::Pen
   );

   // Register for pointer events, which will be raised on the background thread.
   coreInput->PointerPressed += ref new TypedEventHandler<Object^, PointerEventArgs^>(this, &MyClass::OnPointerPressed);
   coreInput->PointerMoved += ref new TypedEventHandler<Object^, PointerEventArgs^>(this, &MyClass::OnPointerMoved);
   coreInput->PointerReleased += ref new TypedEventHandler<Object^, PointerEventArgs^>(this, &MyClass::OnPointerReleased);

   // Begin processing input messages as they're delivered.
   coreInput->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessUntilQuit);
});

// Run task on a dedicated high priority background thread.
m_inputLoopWorker = ThreadPool::RunAsync(workItemHandler, WorkItemPriority::High, WorkItemOptions::TimeSliced);

Weitere Beispielcodes zur Verwendung von CreateCoreIndependentInputSource und CoreIndependentInputSource finden Sie in der DrawingPanel Klassendefinition, die Teil des XAML SwapChainPanel DirectX-Interopbeispiels ist.

Hinweise

Erstellen Sie eine instance dieser Klasse, indem Sie SwapChainBackgroundPanel.CreateCoreIndependentInputSource oder SwapChainPanel.CreateCoreIndependentInputSource aufrufen.

Mit der CoreIndependentInputSource-Klasse kann eine App Eingabe und Rendering unabhängig vom XAML-UI-Thread verarbeiten, da Sie die Eingabeverarbeitungslogik absichtlich für einen Hintergrundthread bereitstellen. Sie müssen CreateCoreIndependentInputSource aus einem Nicht-UI-Thread aufrufen, andernfalls schlägt der Aufruf der CreateCoreIndependentInputSource-Methode fehl.

Versionsverlauf

Windows-Version SDK-Version Wertschöpfung
1803 17134 DispatcherQueue

Eigenschaften

Dispatcher

Ruft den Ereignisverteiler für das Fenster ab.

DispatcherQueue

Ruft den DispatcherQueue ab, der dieser CoreIndependentInputSource zugeordnet ist.

HasCapture

Ruft einen Wert ab, der angibt, ob das Fenster über eine Zeigererfassung verfügt.

IsInputEnabled

Ruft einen Wert ab, der angibt, ob die Eingabe für die UWP-App aktiviert ist, oder legt diesen fest.

PointerCursor

Ruft den von der App verwendeten Zeigercursor ab oder legt diesen fest.

PointerPosition

Ruft die Clientkoordinaten des Zeigers ab.

Methoden

ReleasePointerCapture()

Deaktiviert die Zeigererfassung für die UWP-App.

SetPointerCapture()

Aktiviert die Zeigererfassung für die UWP-App.

Ereignisse

InputEnabled

Tritt auf, wenn die Eingabe für die UWP-App aktiviert oder deaktiviert ist.

PointerCaptureLost

Tritt auf, wenn ein Zeiger auf eine andere UWP-App wechselt. Dieses Ereignis wird nach PointerExited ausgelöst und ist das letzte Ereignis, das von der App für diesen Zeiger empfangen wird.

PointerEntered

Tritt auf, wenn sich ein Zeiger in das Begrenzungsfeld der UWP-App bewegt.

PointerExited

Tritt auf, wenn sich der Zeiger außerhalb des Begrenzungsrahmens der UWP-App bewegt.

PointerMoved

Tritt auf, wenn sich ein Zeiger innerhalb des Begrenzungsrahmens der UWP-App bewegt.

PointerPressed

Tritt auf, wenn im umgebenden Rechteck der UWP-App auf eine Maustaste geklickt oder ein Touch- oder Stiftkontakt erkannt wird.

PointerReleased

Tritt auf, wenn eine Maustaste losgelassen oder ein Berührungs- oder Stiftkontakt innerhalb des umgebenden Rechtecks der UWP-App aufgehoben wird.

PointerRoutedAway

Tritt für das Eingabeobjekt auf, das zeigereingabe empfängt, wenn der Zeiger auf ein anderes Eingabeobjekt umgeleitet wird (möglicherweise in einem separaten Prozess).

PointerRoutedReleased

Tritt für alle Eingabeobjekte auf, die jemals einer Eingabe zugeordnet sind, aber derzeit keine Eingabe von empfangen, ein Zeiger, der ein CoreIndependentInputSource.PointerReleased-Ereignis für ein Eingabeobjekt auslöst.

PointerRoutedTo

Tritt auf, wenn erfasste Zeigereingaben, die zuvor an ein anderes Objekt übermittelt wurden, zur Übermittlung an dieses Objekt übergehen.

PointerWheelChanged

Tritt auf, wenn die Radtaste gedreht wird.

Gilt für:

Weitere Informationen