Bagikan melalui


Skenario tingkat lanjut untuk Kepulauan XAML di aplikasi desktop C++ (Win32)

Penting

Topik ini menggunakan atau menyebutkan jenis dari repositori GitHub CommunityToolkit/Microsoft.Toolkit.Win32 . Untuk informasi penting tentang dukungan Kepulauan XAML, silakan lihat Pemberitahuan Kepulauan XAML di repositori tersebut.

Host kontrol UWP standar dan menghosting artikel kontrol UWP kustom memberikan instruksi dan contoh untuk menghosting Kepulauan XAML di aplikasi desktop C++ (Win32). Namun, contoh kode dalam artikel ini tidak menangani banyak skenario lanjutan yang mungkin perlu ditangani aplikasi desktop untuk memberikan pengalaman pengguna yang lancar. Artikel ini menyediakan panduan untuk beberapa skenario dan penunjuk ini ke sampel kode terkait.

Input keyboard

Untuk menangani input keyboard dengan benar untuk setiap Pulau XAML, aplikasi Anda harus meneruskan semua pesan Windows ke kerangka kerja UWP XAML sehingga pesan tertentu dapat diproses dengan benar. Untuk melakukan ini, di beberapa tempat di aplikasi Anda yang dapat mengakses perulangan pesan, transmisikan objek DesktopWindowXamlSource untuk setiap Pulau XAML ke antarmuka COM IDesktopWindowXamlSourceNative2 . Kemudian, panggil metode PreTranslateMessage antarmuka ini dan teruskan pesan saat ini.

Navigasi fokus keyboard

Saat pengguna menavigasi melalui elemen UI di aplikasi Anda menggunakan keyboard (misalnya, dengan menekan Tab atau tombol arah/panah), Anda harus memindahkan fokus secara terprogram ke dalam dan ke luar objek DesktopWindowXamlSource . Saat navigasi keyboard pengguna mencapai DesktopWindowXamlSource, pindahkan fokus ke objek Windows.UI.Xaml.UIElement pertama dalam urutan navigasi untuk UI Anda, terus pindahkan fokus ke objek Windows.UI.Xaml.UIElement berikut saat pengguna menelusuri elemen, lalu memindahkan fokus kembali dari DesktopWindowXamlSource dan ke elemen UI induk.

API hosting UWP XAML menyediakan beberapa jenis dan anggota untuk membantu Anda menyelesaikan tugas-tugas ini.

Untuk contoh yang menunjukkan cara melakukan ini dalam konteks aplikasi sampel kerja, lihat file kode berikut:

Menangani perubahan tata letak

Saat pengguna mengubah ukuran elemen UI induk, Anda harus menangani perubahan tata letak yang diperlukan untuk memastikan kontrol UWP Anda ditampilkan seperti yang Anda harapkan. Berikut adalah beberapa skenario penting yang perlu dipertimbangkan.

  • Dalam aplikasi desktop C++, ketika aplikasi Anda menangani pesan WM_SIZE, aplikasi dapat memposisikan ulang Pulau XAML yang dihosting dengan menggunakan fungsi SetWindowPos . Misalnya, lihat file kode SampleApp.cpp .

  • Ketika elemen UI induk perlu mendapatkan ukuran area persegi panjang yang diperlukan agar sesuai dengan Windows.UI.Xaml.UIElement yang Anda hosting di DesktopWindowXamlSource, panggil metode Pengukuran Windows.UI.Xaml.UIElement. Contohnya:

  • Ketika ukuran elemen UI induk berubah, panggil metode Atur windows.UI.Xaml.UIElement akar yang Anda hosting di DesktopWindowXamlSource. Contohnya:

Menangani perubahan DPI

Kerangka kerja UWP XAML menangani perubahan DPI untuk kontrol UWP yang dihosting secara otomatis (misalnya, ketika pengguna menyeret jendela antara monitor dengan DPI layar yang berbeda). Untuk pengalaman terbaik, kami sarankan aplikasi desktop Formulir Windows, WPF, atau C++ Anda dikonfigurasi agar diketahui oleh DPI per monitor.

Untuk mengonfigurasi aplikasi Anda agar sadar per monitor DPI, tambahkan manifes perakitan berdampingan ke proyek Anda dan atur< elemen dpiAwareness> ke PerMonitorV2. Untuk informasi selengkapnya tentang nilai ini, lihat deskripsi untuk DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings>
            <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
        </windowsSettings>
    </application>
</assembly>