DPI Awareness
Es gibt vier verschiedene Modi von "DPI-Awarness", die konfiguriert werden können.
Unaware: Bitmap-Dehnung
System: seit Windows-Vista. Die DPI-Einstellung des Hauptdisplays wird verwendet. Bitmap-Dehnung kommt zum Einsatz.
Per-Monitor: seit Windows 8.1. Jeder Bildschirm hat seine eigene DPI Einstellung. Anwendnung werden bei DPI-Änderung benachrichtigt.
Per-Monitor V2: seit Windows 10 Creators Update (1703). Zusätzlich besteht eine automatische Skalierung der "Nonclient-Area" (also Titelzeile, Menuzeile usw.) und viele Controls und Dialoge.
Die Einstellung für die "DPI-Awarness" kann wie folgt erfolgen:
Im manifest file
Per nativer API
In der App.config (seit .NET Framework 4.7 und Windows Forms 4.8)
Also statische Methode in .NET Core 3.0 und .NET 5 für Windows Forms
DPI Scaling in WinForms
Bei der Skalierung werden die Positionen und Größen der Controls abhängig von der Skalierung neu berechnet. Dies geschieht nur, wenn die Anwengung als DPI-Aware konfiguriert wird!
Im Designer.cs/vb File sollten folgende Einstellung vorhanden sein.
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
Alle Container müssen denselben AutoScaleMode verwenden!
Dokumentation: