Problem mit WM_SETFONT
-
Wenn ich die message SendMessage(hWnd, WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0); im WM_CREATE reinschreibe werden alle Buttons mit einer dicken Schriftart (also nicht DEFAULT_GUI_FONT) angezeigt. Wenn ich statt hWnd den speziellen Button hinschreibe den ich verändern will funktioniert es. Warum funktioniert es nicht mit hWnd?
-
Weil hWnd kein Handle für alle Fenster is, sondern für das zu dem die WindowProc gehört
-
Weil das immer nur für das entsprechende Control (Child-Window) gilt
Du kommst also nicht darum herum, das für alle Fenster aufzurufen, die du mit der dünnen Schrift haben willst
-
Gibt es nicht eine Möglichkeit den Font für das ganze Fenster zu verändern? Bei Buttons und Edit Feldern ist es mit sendmessage kein problem den Font zu ändern, aber bei textout geht es so nicht.
-
Da brauchst du dann SelectObject
-
yo danke, kannst du mir die gesammte syntax nennen? Bin neu in der winapi programmierung
-
SelectObject(hDC,GetStockObject(DEFAULT_GUI_FONT));
-
ok mit select object habe ich jetzt textout auf den standard font gesetzt, wenn ich aber die buttons verändern möchte musste ich bis jetzt alle button einzeln mit sendmessage und WM_SETFONT auf den standard font setzen. Gibt es nicht die Möglichkeit mit SendMessage(hWnd, WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),0); alle buttons auf den standard zu setzen? Bei mir funktioniert es nämlich so nicht.
-
Nein, wie bereits gesagt, musst du das für jedes Fenster einzeln machen. Du kannst aber mit EnumChildWindows alle Childs durchgehen und in der Callback den Font setzen
-
kannst du mir bitte die syntax nennen, ich habe schon mehrere sachen probiert aber nicht geschafft den font ohne sendmessage zu ändern
-
sry 4 doppelpost
ich hab jetzt einen quellcode gefunden womit ich den font des hauptfensters (hWnd) ändern kann.
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
SendMessage(hwnd, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
return TRUE;
}EnumChildWindows(hWnd, EnumChildProc, NULL);
Wenn ich jetzt aber versuche den Font eines dialog Fensters zu ändern (hDlg) geht es nicht mehr, der compiler zeigt mir aber keine fehlermeldung an
EnumChildWindows(hDlg, EnumChildProc, NULL);
-
Der zeigt auch keine fehler, den von der syntax ist alles richtig, aber die Inhalte eines Dialogs sind die Enkelkinder deines hauptfensters, wenn du verstehst was ich meine. (Parent->Child->Child)
-
Wenn das Hauptfenster der parent ist, ist ein weiteres fenster also das "enkelkind" des hauptfensters, und was ist das "child" daszwischen?
Kann ich denn so den font des childfensters ändern?
-
du mußt praktisch eine ebene tiefer gehen, mit dem Handle des Childs, dessen Childs finden