Laden...

DrawReversibleFrame Anzeigefehler durch Desktop-Skalierung

Erstellt von Gilderon vor 3 Jahren Letzter Beitrag vor 3 Jahren 993 Views
G
Gilderon Themenstarter:in
2 Beiträge seit 2020
vor 3 Jahren
DrawReversibleFrame Anzeigefehler durch Desktop-Skalierung

Hallo,

ich bin ganz neu hier. Ich habe mich angemeldet, weil ich seit Monaten ein Problem habe, was ich nicht gelöst bekomme.
Natürlich habe ich das Thema hier erstmal gesucht, aber nicht gefunden.

Ich zeichne ein Rubbberband in einem Windows Forms Panel. Ich verwende dazu den Code, der bei Microsoft und anderen C# Foren zum Thema ControlPaint.DrawReversibleFrame
veröffentlicht ist.
Das funzt auch ganz wunderbar, so wie es soll, alles gut.

Nur nicht auf meinem Laptop. Dort wurde das Rechteck versetzt angezeigt. Die Auswahl der eingeschlossenen Objekte passt, nur die Anzeige eben nicht.
Es hat lange gedauert bis ich das auch auf meinem Entwicklungsrechner reproduzieren konnte aber wenigstens das ist mir gelungen.
Auslöser ist der Parameter "Skalierung und Anordnung" der über das Deskto-Menu "Anzeigeeinstellungen" für die Bildschirmanzeige gesetzt werden kann.
Sobald der Wert von 100% abweicht, tritt das Problem auf.

Wer kann mir einen Tip geben?

Ich arbeite mit Windows 10 und Visual Studio 2019

Danke

4.939 Beiträge seit 2008
vor 3 Jahren

Hallo und willkommen,

auf welchem Wert steht denn bei der Form die Eigenschaft AutoScaleMode? Auf Dpi?

Und anhand welcher Werte erzeugst du das Rechteck für ControlPaint.DrawReversibleFrame?

Evtl. mußt du den DPI-Wert als Multiplikator verwenden (x*DPI/96): diesen erhältst du über Graphics.DpiX (sowie Graphics.DpiY), s.a. How to get Windows Display settings?

G
Gilderon Themenstarter:in
2 Beiträge seit 2020
vor 3 Jahren

Hallo,

danke für die Antwort. Sorry für die späte Reaktion.

Die Idee mit dem Multiplikator hatte ich auch schon.

Leider ist der Wert der Graphics.DpiX immer auf 96, egal welche Einstellung ich für die Skalierung setze (125% / 150%)

AutoScale steht auf DPI.

4.939 Beiträge seit 2008
vor 3 Jahren

Du mußt dann wohl noch einen Manifest-Eintrag für dpiAware setzen: How to mark your WinForms applications for High DPI support.

Alternativ könntest du die Lösung mit GetDeviceCaps aus meinen oben verlinkten SO-Beitrag ausprobieren.