Schrifthoehe bestimmen ...
-
Lies die Doku zu LOGFONT und dan weißt Du auch das negative Werte einen Sinn machen:
http://msdn.microsoft.com/en-us/library/ms901140.aspx
-
Wie berechnet man dann die tatsächliche Schrifthoehe in Pixel ?
Kann man dies aus der Doku entnehmen ?
-
GeorgC++ schrieb:
Wie berechnet man dann die tatsächliche Schrifthoehe in Pixel ?
Kann man dies aus der Doku entnehmen ?Riskier doch mal einen Blick, dann findest du es heraus.

-
Für negative lfHeight's gilt folgende Gleichung;
lfHeigth = - (PointSize * GetDeviceCaps(LOGPIXELSY) ) / 72;
umgestellt gilt:
PointSize = - lfHeight * 72 / 96;
mit GetDeviceCaps(LOGPIXELSY) = 96;
Wenn ich einen Font mit Schriftgroesse 8 definiere, ergibt sich für
PointSize = 7.5
Wenn ich einen Font mit Schriftgroesse 20 definiere, ergibt sich für
PointSize = 19.5
Muss man hier aufrunden ?
Wie rundet man in C++ nocheinmal ?
Was berechnet denn GetDeviceCaps(...) ?
-
Wenn du deine Werte (z.B. 7.5) auf Ganzzahlen (kaufmännisch) runden willst, dann multiplizier mit 10, addiere 5 und dividiere wieder durch 10 (Ganzzahlendivision). Kann man prima in einer kleinen Funktion oder einem Makro unterbringen.
-
Weiss aber noch nicht, wann es positive bzw negative lfHeight's gibt und wie man dann PointSize berechnet. Und wie man vorgeht, wenn man eine LOGFONT Struktur definiert und insbesondere lfHeight bestimmt.
-
Bei negativer Zahl müsstest du halt 5 abziehen statt draufaddieren.
Zum Runden haben wir hier doch was:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39342.html
-
Wann brauchst Du denn die Höhe?
Wenn Du den Font hast kannst Du auch einfach mit GetTextMetrics die echte Höhe in Pixeln für Deinen DC ermittln. Du musst nur den Font in den DC selektieren...
-
Mir ist nicht ganz klar, wie Du das meinst ...
Wenn es nur ein paar Zeilen sind, kannst Du es vielleicht hinschreiben.
-
Ein wenig Lektüre:
http://msdn.microsoft.com/en-us/library/aa932923.aspx
http://msdn.microsoft.com/en-us/library/dd162467(VS.85).aspx
http://msdn.microsoft.com/en-us/library/dd183554(VS.85).aspx