Schriftart eine Fensters ermitteln
-
Hallo,
in meiner Anwendung möchte ich über einen Button den Fensterihnalt zwischen 2 Schriftarten umschaltbar machen. Die erste Schrift ist die, die der Benutzer standardmässig benutzt wenn das Programm gestartet wird. Ich weiss ja nicht ob irgendwelche Themes oder sowas läuft. Die zweite Schrift ist die, die ich meinem Programm hinzufüge. So jetzt will ich beim Drücken des Buttons Informationen über die erste Schrift abspeichern und dann auf die zweite Schrift wechselnm, beim erneuten Drücken des Buttons soll wieder auf die erste Schrift gewechselt werden. Wie erhalt ich nun die benötigeten Informationen zur ersten Schriftart?
Danke schon mal
-
GetFont liefert Dir das Font Handle.
GetObject liefert Dir dann die LOGFONT Struktur.
-
Ja danke so bekomme ich die Informationen, aber leider wird mir die Schriftgrösse falsch ausgegeben. Also meine Fensterschrift ist "MS Sans Serif" mit Größe "8" es wird jedoch als lfHeight "-8" ausgegeben was eigentlich die Schriftgröße "6" representieren sollte, bei Größe "8" müsste "-11" stehen. Der Parameter lfFaceName gibt mir "MS Sans Serif" und ist ja somit richtig, wie läßt sich das erklären? Ich post hier mal meinen Code:
void GetFontInfos(HWND hwnd){ HFONT aktueller_font; LOGFONT aktueller_logfont; aktueller_font = (HFONT)SendMessage(hwnd, WM_GETFONT, 0, 0); GetObject(aktueller_font, sizeof(LOGFONT), (PTSTR)&aktueller_logfont); ShowHilfsfenster(va("Schriftnamen: %s", aktueller_logfont.lfFaceName)); ShowHilfsfenster(va("Schrifthöhe: %i", aktueller_logfont.lfHeight)); : : : : }
-
Schau Dir ,al bitte an, wie die Punktgröße eines Fonts errechnet wird.
Um einen 12pt Font auf Deinem Scirm zu bekommen ist folgender Code nötig:
lf.lfHeight = -MulDiv(12, pDC->GetDeviceCaps(LOGPIXELSY), 72);Du musst also rückwärts rechnen.
int iPoints = MulDiv(-lf.lfHeight,72,pDC->GetDeviceCaps(LOGPIXELSY))
-
Yep hab ich jetzt gemacht, siehe code:
HDC hdc; int test; hdc = GetDC(0); test = -MulDiv(8, GetDeviceCaps(hdc, LOGPIXELSY), 72); ReleaseDC(0, hdc);als Ergebniss kommt -11 raus, ähm ich sollte vielleicht noch erwähnen dass der zuerst gepostete Code um an die LOGFONT Daten zu kommen unter WinXP läuft. Lediglich wenn ich ihn auf einer Win98SE Maschine teste, (gleiche Hardware, gleiche Bilschirmsettings, Systemschritart auch gleich gesetzt) dann bringt er mir -8 als lfHeight. Any idea?