2009-03-14 6 views
1

Ich versuche, die Schriftart-DPI-Größe auf dem Ziel-Windows-Rechner herauszufinden und die Schriftart unserer App so zu ändern, dass sie dieselbe Größe aufweist, als wenn der Zielcomputer die gleiche Auflösung wie der Dev-Rechner hätte. (Eine größere Ziel-DPI würde also bedeuten, dass wir unsere Schriften kleiner als zur Entwicklungszeit machen würden).Wie können Sie die entsprechende Schriftgröße berechnen, wenn der Bereitstellungs-PC eine andere Schrift DPI hat?

Ich frage mich, ob es irgendwelche Probleme mit der Lösung unten gibt und speziell, ob LOGPIXELSX = 88 korrekt ist.

Hintergrund

die Größe ich alle Bedienelemente und Schriften auf unseren Formularen die aktuelle Windows-Bildschirmauflösung anzupassen. Wenn jedoch jemand die Font-DPI höher gesetzt hat, müssen wir dies berücksichtigen und die Schriftart kleiner machen (so dass es am Ende die richtige Größe auf dem Bildschirm hat). Unsere Fonts sind schon recht groß (vor allem weil wir sie mit screen res skalieren). Die zusätzliche Größe von der höheren DPI macht den Text zu groß.

Meine Lösung so weit Von dem, was ich sagen kann, wenn wir die GetDeviceCaps wie unten und dann die CurrentFontDPI erhalten und tun dies verwenden: (Ignorieren der Änderung Schriftgröße durch die neue Bildschirmauflösung):

NewFontSize CurrentFontSize = * (DevelopmentDPI/CurrentFontDPI)

Function CurrentFontDPI 
    Dim hwnd, hDC, logPix, r As Long 
    Dim LOGPIXELSX=88 
    hwnd = GetDesktopWindow() 
    hDC = GetDC(hwnd) 
    logPix = GetDeviceCaps(hDC,LOGPIXELSX) 
    r = ReleaseDC(hwnd, hDC) 
    CurrentFontDPI= logPix 

End Function

FYI, ist der obige Code pa rt einer größeren Routine bei "einer damit verbundenen SO-Frage" [1]. Ich den Rest aus dem Code links b/c es mindestens einen Fehler schien (es hatte NewFont = oldFont * (NewDPI-OldDPI), die Sie Nullhöhe Schriftgröße geben würde, wenn die DPI nicht geändert hatte)

[ 1]: http://www.BungalowSoftware.com test

Antwort

2

Hier ist ein good article from Microsoft zum Schreiben von DPI-Anwendungen. (Beachten Sie, dass sich dieser Artikel von dem unterscheidet, der zu Ihrer verwandten Frage gepostet wurde.)

LOGPIXELSX ist ein Parameter für einen Windows-Systemaufruf; Es ist kein DPI-Wert.

In VB6 (IIRC) können Sie das Verhältnis von TwipsPerPixel (X und Y) zur Entwicklungszeit zu TwipsPerPixel (X und Y) zur Laufzeit als eine andere Möglichkeit zur Bestimmung der Skalierung verwenden. Wie Ihr DPI-Verhältnis, aber es nutzt die integrierten VB-Eigenschaften.

+0

+1 für GetDeviceCaps() (siehe den Link) Ich liebe die Windows-API. –

Verwandte Themen