Compartilhar via


CoreIndependentInputSource Classe

Definição

ApIs de entrada principais do Surfaces para cenários de interoperação.

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
Herança
Object Platform::Object IInspectable CoreIndependentInputSource
Atributos
Implementações

Requisitos do Windows

Família de dispositivos
Windows 10 (introduzida na 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (introduzida na v1.0)

Exemplos

Inicializando a entrada independente.

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

Para obter mais código de exemplo de como usar CreateCoreIndependentInputSource e CoreIndependentInputSource, consulte a DrawingPanel definição de classe que faz parte do exemplo de interoperabilidade XAML SwapChainPanel DirectX.

Comentários

Crie uma instância dessa classe chamando SwapChainBackgroundPanel.CreateCoreIndependentInputSource ou SwapChainPanel.CreateCoreIndependentInputSource.

A classe CoreIndependentInputSource permite que um aplicativo manipule a entrada e a renderização independentemente do thread da interface do usuário XAML, pois você está fornecendo intencionalmente a lógica de processamento de entrada em um thread em segundo plano. Você deve chamar CreateCoreIndependentInputSource de um thread que não seja de interface do usuário, caso contrário, a chamada do método CreateCoreIndependentInputSource falhará.

Histórico de versão

Versão do Windows Versão do SDK Valor adicionado
1803 17134 DispatcherQueue

Propriedades

Dispatcher

Obtém o dispatcher de eventos para a janela.

DispatcherQueue

Obtém o DispatcherQueue associado a este CoreIndependentInputSource.

HasCapture

Obtém um valor que relata se a janela tem captura de ponteiro.

IsInputEnabled

Obtém ou define um valor que indica se a entrada está habilitada para o aplicativo UWP.

PointerCursor

Obtém ou define o cursor de ponteiro usado pelo aplicativo.

PointerPosition

Obtém as coordenadas do cliente do ponteiro.

Métodos

ReleasePointerCapture()

Desabilita a captura de ponteiro para o aplicativo UWP.

SetPointerCapture()

Habilita a captura de ponteiro para o aplicativo UWP.

Eventos

InputEnabled

Ocorre quando a entrada está habilitada ou desabilitada para o aplicativo UWP.

PointerCaptureLost

Ocorre quando um ponteiro se move para outro aplicativo UWP. Esse evento é gerado após PointerExited e é o evento final recebido pelo aplicativo para esse ponteiro.

PointerEntered

Ocorre quando um ponteiro se move para a caixa delimitadora do aplicativo UWP.

PointerExited

Ocorre quando o ponteiro se move para fora da caixa delimitadora do aplicativo UWP.

PointerMoved

Ocorre quando um ponteiro se move dentro da caixa delimitadora do aplicativo UWP.

PointerPressed

Ocorre quando um botão do mouse é clicado ou um contato de toque ou caneta é detectado, dentro do retângulo delimitador do aplicativo UWP.

PointerReleased

Ocorre quando um botão do mouse é liberado ou um contato de toque ou caneta é levantado, dentro do retângulo delimitador do aplicativo UWP.

PointerRoutedAway

Ocorre no objeto de entrada que recebe a entrada do ponteiro quando o ponteiro é redirecionado para outro objeto de entrada (possivelmente em um processo separado).

PointerRoutedReleased

Ocorre em todos os objetos de entrada já associados, mas não recebendo entrada no momento, um ponteiro que dispara um evento CoreIndependentInputSource.PointerReleased em um objeto de entrada.

PointerRoutedTo

Ocorre quando a entrada de ponteiro capturada anteriormente sendo entregue a outro objeto faz a transição para ser entregue a esse objeto.

PointerWheelChanged

Ocorre quando o botão de roda é girado.

Aplica-se a

Confira também