schrift aendern
-
hola leute
wie kann ich die schrift fuer TextOut aendern ?
hab in meiner WndPRoc unter WM_CREATE folgendes dinnen:
hfont = CreateFont(10, 5, 0, 0, 700, TRUE, TRUE, FALSE, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, "Arial"); SendMessage(hwnd, WM_SETFONT, (WPARAM)hfont, MAKELONG(TRUE, 0));es bleibt trotzdem die systemschrift oder was das sein soll.
was hab ich da falsch gemacht ? bzw. wie macht man das richtig ?Meep Meep
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Du schickst dir nur ne nachricht.
hFont muss static in der wndproc sein.
Dann einfach in WM_PAINT SelectObject(<dein Kontext>, hFont);
Und bei WM_DESTROY wieder mit DestroyObject(hFont);
vernichten

-
Hi,
1. Die Schriftvariable muss static. Anschließend unter WM_DESTROY wieder freigeben.
2. TextOut und WM_SETFONT sind 2 Paar Schuhe: Mit TextOut malst du direkt auf
den Display (jaja...über den DC) und bei WM_SETFONT setzt du die Schrift eines Controls.
Dieses kümmert sich dann selbst um die Zeichenarbeiten. Bei TextOut muss du die Schrift wie
tobZel schon sagte in den DC selektieren und anschließend (WICHTIG) das GDI Clean up dafür
durchführen.tobZel schrieb:
[...]
Und bei WM_DESTROY wieder mit DestroyObject(hFont);
[...]DeleteObject(...)

-
re
static HFONT war mein fehler. cermy. DeletObject hab ich shco dabei gehabt.
wenn man in ner anwendung hausnummer 5 verschiedene schriftarten braucht. ist es dann sinnvoller am anfang schon die fonts zu erstellen oder erst dann wenn man sie braucht? ich hab leider keine ahnung wie lange das erzeugen einer schrift dauert und wieviel speicher so ein objekt in anspruch nimmt.
wie macht man das eigendlich wenn man die schrift auf z.b. fett umstellen will ?
font loeschen und wieder den gleichen mit attribut 'fett' erstellen ? oder kann man das anders aendern ?Meep Meep
-
Meep Meep schrieb:
re
static HFONT war mein fehler. cermy. DeletObject hab ich shco dabei gehabt.
wenn man in ner anwendung hausnummer 5 verschiedene schriftarten braucht. ist es dann sinnvoller am anfang schon die fonts zu erstellen oder erst dann wenn man sie braucht? ich hab leider keine ahnung wie lange das erzeugen einer schrift dauert und wieviel speicher so ein objekt in anspruch nimmt.
Meep Meep
Hängt von der Anzahl der Verwendung ab. Wo wird die denn gebraucht? -WM_PAINT ?
-
unter anderem fuer WM_PAINT.
ich hab leider noch nicht so viel ahnung wie das intern ablaeuft.
bei CreateFont gibt man mit den ersten 2 parametern den groesse der schrift an. woher weiß man, welche werte man eingeben muss, damit man eine z.b. 8 punkt schrift hat ?Meep Meep
-
Hast Du schon die WinAPI Reference?
http://www.borland.com/devsupport/borlandcpp/patches/BC52HLP1.ZIPSeit neuestem hole ich mir die Schriftarten gleich zum Programmanfang:
HFONT hFontArial8; HFONT hFontFixedsys; void InitFont(void) { LOGFONT lf; memset(&lf, 0, sizeof(LOGFONT)); lf.lfHeight = 8; strcpy(lf.lfFaceName, "Arial"); hFontArial8 = CreateFontIndirect(&lf); strcpy(lf.lfFaceName, "Fixedsys"); hFontFixedsys = CreateFontIndirect(&lf); } ... WndProc(...) { WM_CREATE: InitFont(); return(); WM_PAINT: BeginPaint(); oldfont = (HFONT)SelectObject(hdc, hFontArial8); TextOut(hdc, 0, 0, "Schweine im Weltall", strlen("Schweine im Weltall")); SelectObject(hdc, oldfont); EndPaint(); return(); WM_DESTROY: DeleteObject(hFontArial8); DeleteObject(hFontFixedsys); return(); }
-
@keksekekse: Globale Variablen...naja
