Bagikan melalui


InputPointerSource Kelas

Definisi

Mewakili objek yang terdaftar untuk melaporkan input pointer dan menyediakan kursor penunjuk dan penanganan peristiwa input.

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
Warisan
Object Platform::Object IInspectable InputObject InputPointerSource
Atribut

Contoh

Contoh berikut menunjukkan cara mengonfigurasi SwapChainPanel dengan CreateCoreIndependentInputSource dan menerima pena latensi rendah dan menyentuh input pada utas latar belakang melalui 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();
}

Contoh ini menunjukkan cara mengonfigurasi gambar kursor tangan sistem untuk ditampilkan saat kursor mengarahkan kursor ke 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);

Keterangan

Ruang koordinat untuk peristiwa penunjuk berada di ruang koordinat yang sama dengan objek SwapChainPanel .

Urutan peristiwa

Kasus Normal

Peristiwa pointer InputPointerSource mengikuti urutan yang dijamin dalam keadaan normal:

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

Di mana PointerMoved hanya akan dinaikkan jika penunjuk bergerak atau status tombol pada perubahan mouse. Semua peristiwa memiliki id pointer yang sama.

Penangkapan pointer hilang

PointerCaptureLost dinaikkan ketika penunjuk dalam kontak dirutekan ke target input yang berbeda oleh sistem input. Ketika PointerCaptureLost dinaikkan, yang hanya akan terjadi setelah PointerPressed diterima, tidak ada peristiwa tambahan yang akan dinaikkan untuk pointer tersebut. Secara khusus, PointerReleased dan PointerExited tidak akan dinaikkan, jadi Anda harus menangani PointerCaptureLost sebagai status akhir yang valid untuk pointer tertentu. Berikut adalah contoh urutan peristiwa yang valid yang mencakup kehilangan pengambilan pointer:

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

Peristiwa yang dirutekan

Peristiwa yang dirutekan pointer dinaikkan ketika penunjuk dalam kontak dirutekan ke target input yang berbeda oleh sistem input. Tidak seperti PointerCaptureLost, peristiwa yang dirutekan memberikan kemungkinan penunjuk dalam kontak dirutekan kembali sebelum pointer dirilis.

Berikut ini memperlihatkan urutan peristiwa yang valid di mana penunjuk dalam kontak dirutekan ke target yang berbeda, dirutekan kembali ke InputPointerSource asli, lalu dirilis:

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

Berikut adalah contoh urutan peristiwa yang valid di mana penunjuk dalam kontak dirutekan ke target yang berbeda lalu dirilis pada target lain:

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

Catatan

Ketika PointerRoutedReleased dinaikkan, tidak ada peristiwa tambahan yang akan dinaikkan untuk pointer tersebut. Secara khusus, PointerReleased dan PointerExited tidak akan dinaikkan, jadi Anda harus menangani PointerRoutedReleased sebagai status akhir yang valid untuk pointer tertentu.

Dimungkinkan juga untuk menerima pointer kontak baru yang dirutekan dari target yang berbeda. Dalam hal ini, peristiwa PointerEntered dan PointerPressed dijamin akan mendahului PointerRoutedTo jika pointer belum dilihat oleh InputPointerSource saat ini. Berikut ini adalah contoh urutan peristiwa ini:

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

Properti

Cursor

Mendapatkan atau mengatur kursor yang ditampilkan saat penunjuk mouse atau pena melebihi target input, Visual atau WindowId (HWND), dari InputPointerSource ini.

DeviceKinds

Mendapatkan jenis perangkat yang didukung oleh InputPointerSource ini.

DispatcherQueue

Mendapatkan DispatcherQueue untuk InputObject.

(Diperoleh dari InputObject)

Metode

GetForIsland(ContentIsland)

InputPointerSource Mengambil objek untuk ContentIsland yang ditentukan.

Acara

PointerCaptureLost

Terjadi ketika pointer yang bersentuhan dengan InputPointerSource ini berpindah ke target input lain.

PointerEntered

Terjadi ketika penunjuk bergerak ke batas InputPointerSource ini.

PointerExited

Terjadi ketika penunjuk bergerak keluar dari batas InputPointerSource ini.

PointerMoved

Terjadi ketika penunjuk bergerak saat berada di dalam batas InputPointerSource ini.

PointerPressed

Terjadi ketika tombol mouse ditekan, atau jari atau pena memulai kontak dengan permukaan digitizer, sementara di dalam batas InputPointerSource ini.

PointerReleased

Terjadi ketika perangkat penunjuk yang sebelumnya memulai tindakan Tekan dilepaskan (tombol mouse dilepaskan, atau kontak sentuh atau pena diangkat dari permukaan digitizer), sementara di dalam batas InputPointerSource ini.

PointerRoutedAway

Terjadi ketika pointer dialihkan ke InputPointerSource lain (mungkin dalam proses terpisah).

PointerRoutedReleased

Terjadi ketika s pointer yang dirutekan ke InputPointerSource yang berbeda dirilis pada target input lainnya.

PointerRoutedTo

Terjadi ketika pointer dirutekan ke InputPointerSource ini dari target input yang berbeda.

PointerWheelChanged

Terjadi ketika roda mouse diputar (nilai delta roda berubah).

Berlaku untuk

Lihat juga