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
824 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
<dpiaware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiaware>
Salin selepas log masuk

2. Menggunakan Fungsi API Windows:

Panggilan API yang sesuai bergantung pada versi Windows:

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

enum ProcessDPIAwareness
{
    DPI_Unaware = 0,
    System_DPI_Aware = 1,
    Per_Monitor_DPI_Aware = 2
}
Salin selepas log masuk
  • Windows 10 (1703 dan kemudian):
[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
}
Salin selepas log masuk

3. Menggunakan : AssemblyInfo.cs

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

[assembly: System.Windows.Media.DisableDpiAwareness]
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!

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