Rumah > pembangunan bahagian belakang > C++ > Kenapa aplikasi DPI-Unaware saya tiba-tiba menjadi DPI-ALARA selepas kemas kini?

Kenapa aplikasi DPI-Unaware saya tiba-tiba menjadi DPI-ALARA selepas kemas kini?

Patricia Arquette
Lepaskan: 2025-01-28 08:56:10
asal
756 orang telah melayarinya

Why Does My DPI-Unaware Application Suddenly Become DPI-Aware After an Update?

perubahan kesedaran DPI yang tidak dijangka selepas kemas kini aplikasi

Sesetengah aplikasi, yang asalnya direka sebagai DPI-Unaware (bergantung pada Skala UI Windows), secara tidak disangka-sangka menjadi DPI-Aware (Sistem sedar) berikutan kemas kini kecil. Ini berlaku walaupun aplikasi yang nyata dan kebergantungan luaran kekal tidak berubah.

punca akar:

Tingkah laku ini sering disebabkan oleh komponen atau kebergantungan pihak ketiga DPI. Walaupun dengan pengisytiharan DPI-unAware yang jelas dalam manifes aplikasi, kemasukan komponen tersebut dapat mengatasi tetapan, memaksa kesedaran DPI.

penyelesaian untuk menentukan kesedaran DPI:

Beberapa pendekatan dapat secara eksplisit mengawal kesedaran DPI aplikasi:

1. Mengubahsuai aplikasi yang nyata:

    Ubah suai
  • untuk memasukkan (atau uncomment) yang berikut: app.manifest
<code class="language-xml"><dpiaware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiaware></code>
Salin selepas log masuk

2. Menggunakan Fungsi API Windows:

Panggilan API yang sesuai bergantung pada versi Windows:

  • Windows 7:
<code class="language-csharp">[DllImport("user32.dll", SetLastError = true)]
static extern bool SetProcessDPIAware();</code>
Salin selepas log masuk
  • Windows 8.1:
<code class="language-csharp">[DllImport("shcore.dll")]
static extern int SetProcessDpiAwareness(ProcessDPIAwareness value);

enum ProcessDPIAwareness
{
    DPI_Unaware = 0,
    System_DPI_Aware = 1,
    Per_Monitor_DPI_Aware = 2
}</code>
Salin selepas log masuk
  • Windows 10 (1703 dan kemudian):
<code class="language-csharp">[DllImport("user32.dll", SetLastError = true)]
static extern int SetProcessDpiAwarenessContext(DpiAwarenessContext value);

enum DpiAwarenessContext
{
    Context_Unaware = (DPI_AWARENESS_CONTEXT)-1,
    Context_SystemAware = (DPI_AWARENESS_CONTEXT)-2,
    Context_PerMonitorAware = (DPI_AWARENESS_CONTEXT)-3,
    Context_PerMonitorAwareV2 = (DPI_AWARENESS_CONTEXT)-4
}</code>
Salin selepas log masuk

3. Menggunakan : AssemblyInfo.cs

tambahkan atribut ini untuk mengatasi kesedaran DPI yang ditakrifkan sistem berdasarkan rujukan komponen:

<code class="language-csharp">[assembly: System.Windows.Media.DisableDpiAwareness]</code>
Salin selepas log masuk

Pertimbangan penting:

    kesedaran DPI adalah spesifik benang. Gunakan fungsi API khusus benang untuk kawalan berbutir ke atas benang individu.
  • Pastikan semua komponen dan kebergantungan pihak ketiga selaras dengan tahap kesedaran DPI yang dikehendaki.

Atas ialah kandungan terperinci Kenapa aplikasi DPI-Unaware saya tiba-tiba menjadi DPI-ALARA selepas kemas kini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan