2017-06-02 2 views
0

Wir haben eine ziemlich alte Anwendung, die auf Microsoft Access basiert. Teile der Benutzeroberfläche sind immer noch Microsoft Access, andere Teile verwenden WinForms und die neuesten Teile verwenden WPF (versuchen, die alten Teile Schritt für Schritt loszuwerden).Legacy-App und Skalierung in Windows 10

Wir haben ein seltsames Skalierungsproblem in Windows 10 und einem hohen DPI-Monitor entdeckt und nun suche ich nach einer Lösung für dieses Problem, vorzugsweise eines, das nicht die alte Benutzeroberfläche ändert.

Um mit diesem hohen DPI-Monitor arbeiten zu können, sollte die Windows-Skalierung auf 200% eingestellt werden.

Und hier ist das Problem: Wenn der Benutzer mit der Skalierung auf 200% eingeloggt beginnt unsere Anwendung in Strings, die eine zu große Schriftart für den Raum der Zeichenfolge verwendet. Es sieht aus wie Windows die Schriftgröße erhöht der Zeichenfolgen, aber nicht die Dimensionen der Steuerelemente, die die Zeichenfolgen enthalten. Wenn Sie die Skalierung von Windows ändern, wird das Problem nicht behoben. Wenn Sie die Anwendung neu starten, nachdem Sie die Skalierung geändert haben, wird das Problem nicht behoben.

Obwohl ... wenn der Benutzer sich mit der auf 100% eingestellten Skalierung anmeldet, ist alles in Ordnung, auch wenn die Skalierung danach geändert wird oder die Anwendung neu gestartet wird.

Aber wir können nicht und werden sagen unsere Benutzer nicht immer die Skalierung von Windows setzen wieder auf 100%, wenn sich abzumelden und wieder zu erhöhen, wenn sich anzumelden.

Gibt es eine andere Art und Weise zu umgehen Sie dieses Problem?

Danke für Ihre Hilfe (wenn es welche gibt).

+0

Erstellen einer App dpiAware ist Arbeit. Überfällige Arbeit, in der Regel, je älter die App desto weniger wahrscheinlich, dass der Programmierer auf Skalierungsprobleme geachtet hat. Mit WPF in der App wird es schlimmer, es deklariert automatisch die App als dpiAware, wenn es nicht tatsächlich ist. Am schnellsten beheben Sie dies, indem Sie [assembly: System.Windows.Media.DisableDpiAwareness] zu Ihrem Code hinzufügen. Vielleicht magst du das Ergebnis nicht zu sehr, du musst die Ärmel hochkrempeln, um es besser zu machen. –

+0

[Ziel die App auf 4.7 und machen Sie die Änderungen, die ich hier gestellt habe] (https://Stackoverflow.com/a/43808350/1466046), jetzt ist der winforms Teil auch DPIaware und sollte das Problem beheben – magicandre1981

Antwort

0

Nach ein wenig Googeln habe ich zumindest für mein spezielles Problem eine Lösung gefunden.

Microsoft Access hatte eine Manifestdatei mit einem dpiAware Knoten, der auf true festgelegt ist. Die Änderung an false scheint Access mitzuteilen, dass es nicht die "intelligente" Skalierung von Microsoft verwenden und stattdessen eine Art "dumme" Skalierung verwenden soll. Das hat das ganze Problem für mich behoben.

Soweit ich weiß, kann man eine solche Manifest-Datei für jede ausführbare Datei erstellen, um dieses Problem mit älteren Anwendungen zu beheben, aber ich habe das nicht versucht, weil Access mit einer bereits vorhandenen Manifest-Datei ausgeliefert wurde.