Bagikan melalui


enumerasi PROCESS_DPI_AWARENESS (shellscalingapi.h)

Mengidentifikasi nilai kesadaran titik per inci (dpi). Kesadaran DPI menunjukkan berapa banyak pekerjaan penskalaan yang dilakukan aplikasi untuk DPI versus berapa banyak yang dilakukan oleh sistem.

Pengguna memiliki kemampuan untuk mengatur faktor skala DPI pada tampilan mereka yang independen satu sama lain. Beberapa aplikasi warisan tidak dapat menyesuaikan penskalaannya untuk beberapa pengaturan DPI. Agar pengguna dapat menggunakan aplikasi ini tanpa konten yang muncul terlalu besar atau kecil pada tampilan, Windows dapat menerapkan virtualisasi DPI ke aplikasi, menyebabkannya secara otomatis diskalakan oleh sistem agar sesuai dengan DPI tampilan saat ini. Nilai PROCESS_DPI_AWARENESS menunjukkan tingkat penskalaan apa yang ditangani aplikasi Anda sendiri dan berapa banyak yang disediakan oleh Windows. Perlu diingat bahwa aplikasi yang diskalakan oleh sistem mungkin tampak buram dan akan membaca data virtual tentang monitor untuk menjaga kompatibilitas.

Sintaks

typedef enum PROCESS_DPI_AWARENESS {
  PROCESS_DPI_UNAWARE = 0,
  PROCESS_SYSTEM_DPI_AWARE = 1,
  PROCESS_PER_MONITOR_DPI_AWARE = 2
} ;

Konstanta

 
PROCESS_DPI_UNAWARE
Nilai: 0
DPI tidak menyadari. Aplikasi ini tidak menskalakan perubahan DPI dan selalu diasumsikan memiliki faktor skala 100% (96 DPI). Ini akan secara otomatis diskalakan oleh sistem pada pengaturan DPI lainnya.
PROCESS_SYSTEM_DPI_AWARE
Nilai: 1
DPI sistem sadar. Aplikasi ini tidak menskalakan perubahan DPI. Ini akan meminta DPI sekali dan menggunakan nilai tersebut untuk masa pakai aplikasi. Jika DPI berubah, aplikasi tidak akan menyesuaikan dengan nilai DPI baru. Ini akan secara otomatis ditingkatkan atau diturunkan oleh sistem ketika DPI berubah dari nilai sistem.
PROCESS_PER_MONITOR_DPI_AWARE
Nilai: 2
Per monitor DPI sadar. Aplikasi ini memeriksa DPI saat dibuat dan menyesuaikan faktor skala setiap kali DPI berubah. Aplikasi ini tidak secara otomatis diskalakan oleh sistem.

Keterangan

Penting  

Versi Windows sebelumnya mengharuskan Anda mengatur kesadaran DPI untuk seluruh aplikasi. Sekarang kesadaran DPI terkait dengan utas, proses, atau jendela individual. Ini berarti bahwa kesadaran DPI dapat berubah saat aplikasi berjalan dan bahwa beberapa jendela dapat memiliki nilai kesadaran DPI independen mereka sendiri. Lihat DPI_AWARENESS untuk informasi selengkapnya tentang cara kerja kesadaran DPI saat ini. Rekomendasi di bawah ini tentang mengatur kesadaran DPI dalam manifes aplikasi masih didukung, tetapi rekomendasi saat ini adalah menggunakan DPI_AWARENESS_CONTEXT.

 
Kesadaran DPI untuk aplikasi harus diatur melalui manifes aplikasi sehingga ditentukan sebelum tindakan diambil yang bergantung pada DPI sistem. Atau, Anda dapat mengatur kesadaran DPI menggunakan SetProcessDpiAwareness, tetapi jika Anda melakukannya, Anda perlu memastikan untuk mengaturnya sebelum mengambil tindakan apa pun tergantung pada DPI sistem. Setelah Anda mengatur kesadaran DPI untuk proses, itu tidak dapat diubah.
Tip  

Jika aplikasi Anda PROCESS_DPI_UNAWARE, tidak perlu menetapkan nilai apa pun dalam manifes aplikasi. PROCESS_DPI_UNAWARE adalah nilai default untuk aplikasi kecuali nilai lain ditentukan.

 
PROCESS_DPI_UNAWARE dan aplikasi PROCESS_SYSTEM_DPI_AWARE tidak perlu merespons WM_DPICHANGED dan tidak diharapkan untuk menangani perubahan di DPI. Sistem akan secara otomatis menskalakan jenis aplikasi ini ke atas atau ke bawah seperlunya saat DPI berubah. PROCESS_PER_MONITOR_DPI_AWARE aplikasi bertanggung jawab untuk mengenali dan merespons perubahan DPI, yang disinyalkan oleh WM_DPICHANGED. Ini tidak akan diskalakan oleh sistem. Jika aplikasi jenis ini tidak mengubah ukuran jendela dan kontennya, aplikasi tersebut akan tampak tumbuh atau menyusut oleh DPI relatif berubah saat jendela dipindahkan dari satu tampilan ke tampilan lainnya dengan pengaturan DPI yang berbeda.
Tip  

Di versi Windows sebelumnya, tidak ada pengaturan untuk PROCESS_PER_MONITOR_DPI_AWARE. Aplikasi tidak menyadari DPI atau DPI. Aplikasi warisan yang diklasifikasikan sebagai sadar DPI sebelum Windows 8.1 dianggap memiliki pengaturan PROCESS_SYSTEM_DPI_AWARE PROCESS_DPI_AWARENESS dalam versi Windows saat ini.

 
Untuk memahami pentingnya dan dampak dari nilai kesadaran DPI yang berbeda, pertimbangkan pengguna yang memiliki tiga tampilan: A, B, dan C. Tampilan A diatur ke faktor penskalaan 100% (96 DPI), tampilan B diatur ke faktor penskalaan 200% (192 DPI), dan tampilan C diatur ke faktor penskalaan 300% (288 DPI). DPI sistem diatur ke 200%.

Aplikasi yang PROCESS_DPI_UNAWARE akan selalu menggunakan faktor penskalaan 100% (96 DPI). Dalam skenario ini, jendela PROCESS_DPI_UNAWARE dibuat dengan ukuran 500 sebesar 500. Pada layar A, itu akan dirender secara asli tanpa penskalakan. Pada tampilan B dan C, itu akan ditingkatkan skalanya oleh sistem secara otomatis dengan faktor masing-masing 2 dan 3. Ini karena PROCESS_DPI_UNAWARE selalu mengasumsikan DPI 96, dan sistem memperkirakannya. Jika kueri aplikasi untuk ukuran jendela, aplikasi akan selalu mendapatkan nilai 500 sebesar 500 terlepas dari tampilannya. Jika aplikasi ini meminta DPI dari salah satu dari tiga monitor, aplikasi ini akan menerima 96.

Sekarang pertimbangkan aplikasi yang PROCESS_SYSTEM_DPI_AWARE. Ingat bahwa dalam sampel, DPI sistem adalah 200% atau 192 DPI. Ini berarti bahwa setiap jendela yang dibuat oleh aplikasi ini akan dirender secara asli pada tampilan B. Jendela bergerak untuk menampilkan A, secara otomatis akan diturunkan skalanya dengan faktor 2. Ini karena aplikasi PROCESS_SYSTEM_DPI_AWARE dalam skenario ini mengasumsikan bahwa DPI akan selalu 192. Ini meminta DPI pada startup, dan kemudian tidak pernah mengubahnya. Sistem mengakomodasi ini dengan secara otomatis menurunkan skala saat pindah ke tampilan A. Demikian juga, jika jendela bergerak untuk menampilkan C, sistem akan secara otomatis meningkatkan skala dengan faktor 1,5. Jika kueri aplikasi untuk ukuran jendela, aplikasi akan selalu mendapatkan nilai yang sama, mirip dengan PROCESS_DPI_UNAWARE. Jika meminta DPI dari salah satu dari tiga monitor, itu akan menerima 192.

Tidak seperti nilai kesadaran lainnya, PROCESS_PER_MONITOR_DPI_AWARE harus beradaptasi dengan tampilan tempatnya berada. Ini berarti bahwa itu selalu dirender secara asli dan tidak pernah diskalakan oleh sistem. Tanggung jawab ada pada aplikasi untuk menyesuaikan faktor skala saat menerima pesan WM_DPICHANGED . Bagian dari pesan ini mencakup rect yang disarankan untuk jendela. Saran ini adalah jendela saat ini yang diskalakan dari nilai DPI lama ke nilai DPI baru. Misalnya, jendela yang 500 kali 500 pada tampilan A dan dipindahkan ke tampilan B akan menerima rect jendela yang disarankan yaitu 1000 kali 1000. Jika jendela yang sama dipindahkan untuk menampilkan C, rect jendela yang disarankan yang dilampirkan ke WM_DPICHANGED akan menjadi 1500 oleh 1500. Selain itu, ketika aplikasi ini meminta ukuran jendela, aplikasi ini akan selalu mendapatkan nilai asli yang sebenarnya. Demikian juga, jika meminta DPI dari salah satu dari tiga monitor, masing-masing akan menerima 96, 192, dan 288.

Karena virtualisasi DPI, jika satu aplikasi meminta aplikasi lain dengan tingkat kesadaran yang berbeda untuk informasi yang bergantung pada DPI, sistem akan secara otomatis menskalakan nilai agar sesuai dengan tingkat kesadaran pemanggil. Salah satu contohnya adalah jika Anda memanggil GetWindowRect dan meneruskan jendela yang dibuat oleh aplikasi lain. Dengan menggunakan situasi yang dijelaskan di atas, asumsikan bahwa aplikasi PROCESS_DPI_UNAWARE membuat jendela 500 kali 500 pada tampilan C. Jika Anda meminta rect jendela dari aplikasi yang berbeda, ukuran rect akan bervariasi berdasarkan kesadaran DPI aplikasi Anda.

PROCESS_DPI_UNAWARE Anda akan mendapatkan 500 dengan 500 rect karena sistem akan mengasumsikan DPI 96 dan secara otomatis menurunkan skala rect aktual dengan faktor 3.
PROCESS_SYSTEM_DPI_AWARE Anda akan mendapatkan 1000 dengan 1000 rect karena sistem akan mengasumsikan DPI 192 dan secara otomatis menurunkan skala rect aktual dengan faktor 3/2.
PROCESS_PER_MONITOR_DPI_AWARE Anda akan mendapatkan 1500 dengan 1500 rect karena sistem akan menggunakan DPI tampilan yang sebenarnya dan tidak melakukan penskalaan di belakang layar.
 

Contoh

Cuplikan ini menunjukkan cara menetapkan nilai PROCESS_SYSTEM_DPI_AWARE dalam manifes aplikasi Anda.

<dpiAware>true</dpiAware>

Cuplikan ini menunjukkan cara menetapkan nilai PROCESS_PER_MONITOR_DPI_AWARE dalam manifes aplikasi Anda.

<dpiAware>true/PM</dpiAware>

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 8.1 [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2012 R2 [hanya aplikasi desktop]
Header shellscalingapi.h

Lihat juga

DPI_AWARENESS