Problem bei der Änderung der Schriftart (Logfont)
-
Hallo,
ich habe eine Logfont-Struktur erstellt. Ich kann den Text auch unterstreichen, durchstreichen oder kursiv schreiben, jedoch ist es egal welche Schriftart ich angebe (Arial, Times New Roman,...), die Schrift sieht immer gleich aus.
Jetzt meine Frage, woran liegt das? Was habe ich falsch gemacht?
Hier der Codeausschnitt:
BOOL SISText::Paint(HDC hdc) { RECT rect; LOGFONT font; HFONT hFontNew, hFontOld; rect.left = 0; rect.top = 0; rect.right = 100; rect.bottom = 200; font.lfHeight= -20; font.lfWidth=0; font.lfEscapement=0; font.lfOrientation=0; font.lfWeight=FW_NORMAL; font.lfItalic=false; font.lfUnderline=false; font.lfStrikeOut=false; font.lfCharSet=ANSI_CHARSET; font.lfOutPrecision=OUT_DEFAULT_PRECIS; font.lfClipPrecision=CLIP_CHARACTER_PRECIS; font.lfQuality=DEFAULT_QUALITY; font.lfPitchAndFamily=FF_DONTCARE; (font.lfFaceName,_T("Arial")); hFontNew = CreateFontIndirect(&font); hFontOld = (HFONT) SelectObject(hdc, hFontNew); DrawText(hdc, TEXT("Caption"), -1, &rect, DT_CENTER); return true; }Hoffe, dass ihr mir helfen könnt. Danke schon mal im voraus.
Lg Heike
-
Heike711 schrieb:
BOOL SISText::Paint(HDC hdc) { ... (font.lfFaceName,_T("Arial")); ...Hoffe, dass ihr mir helfen könnt. Danke schon mal im voraus.
Hier fehlt en _tcscpy oder _tcsncpy.
Dieses Statement hat keinen Effekt!
-
Hi,
danke erstmal für deine schnelle Antwort. Jedoch hab ich leider keine Ahnung wo ich das einfügen muss, bin Anfängerin.Heike
Habe es jetzt eingefügt. Sieht jetzt so aus:
wcscpy(font.lfFaceName,_T("Arial"));Aber wenn ich anstelle von "Arial" z.B. "Times New Roman" eingebe, dann verändert sich die Schriftart immer noch nicht??!
-
Ein Blick in die Doku zu _tcscpy!
Oder ein Blick in das Sample, woher Du den Rest kopiert hast.
Oder ein Blick in ein Tutorial, dass den Umgang mit Fonts zeigt!_tcscpy(font.lfFaceName,_T("Arial"));
-
Hi,
habe das jetzt so geändert, jedoch habe ich immer noch keine Veränderung. Naja werde noch ein wenig damit rumprobieren. Und nochmals die Hilfe durchforsten, obwohl das mir eben auch wenig gebracht hat. Hab da ja nur das gefunden, was ich eben gepostet habewcscpy(font.lfFaceName,_T("Arial"));
-
@Heike711
Ist deine Anwendung auch eine Unicode-Anwendung, weil du die Funktion wcscpy benutzt?Wenn du z.B. noch nicht weist, ob sie später Unicode unterstützen soll oder nicht, verwende für das Kopieren der Zeichenkette die hier vorgeschlagene Funktion _tcscpy, oder lstrcpy.
Es ist auch ganz hilfreich die Rückgabe von
hFontNew = CreateFontIndirect(&font);zu überprüfen (ob erstellt werden konnte != NULL)
und wenn == NULL, dann den Fehler mit GetLastError abzufragen.Des weiteren wird bei jedem Aufruf der Funktion ein neues Fonthandle angelegt.
Nach dem Zeichnen sollte hier nochSelectObject(hdc, hFontOld); DeleteObject(hFontNew);stehen