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
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: