SendMessage: request Font
-
Ein parent ist hier ja noch nicht vorhanden, genauso wie auch in der View von der SDI Applikation; wie muss ich es hier dann machen, damit ich die Schrift erhalte?
Wieso ist dein Parent hier noch nicht vorhanden? Zu welchem Zeitpunkt erzeugst du den Dialog? Wenn du im OnInitDialog des Dialogs GetParent() aufrufst, solltest du auch den Parent des Dialogs zurückbekommen.
mit
SetFont(&m_font, true);
klappt es leider auch nicht.Was heißt "klappt nicht"? Wird der von dir erzeugte Font nicht verwendet, oder gibts eine Ausnahme?
-
Source2702 schrieb:
Ein parent ist hier ja noch nicht vorhanden, genauso wie auch in der View von der SDI Applikation; wie muss ich es hier dann machen, damit ich die Schrift erhalte?
Wieso ist dein Parent hier noch nicht vorhanden? Zu welchem Zeitpunkt erzeugst du den Dialog? Wenn du im OnInitDialog des Dialogs GetParent() aufrufst, solltest du auch den Parent des Dialogs zurückbekommen.
In der OnCreate() vom Mainframe gibt es ja kein parent(). Hab es aber auch schon an anderen STellen, wie in der View ausprobiert, und hier wird ebenfalls einfach null zurückgegeben. Meiner Meinung nach wird die Font nicht ordentlich initialisiert bzw. bekanntgegeben.
mit
SetFont(&m_font, true);
klappt es leider auch nicht.Was heißt "klappt nicht"? Wird der von dir erzeugte Font nicht verwendet, oder gibts eine Ausnahme?
Es gibt keine Ausnahme, sondern es wird einfach 0 zurückgegeben; so als ob die Systemfont verwendet wird und meine erzeugte font nicht.
-
Was meinst Du mit klappt nicht?
SetFont gibt doch gar keinen Wert zurück.Nur mal als Anmerung: Wenn alle Controls z.B. in einem Dialog schon erzeugt wurden, dann hat ein nachträgliches SetFont auf den Dialog auf die Contreols keine Auswirkung mehr!
Evtl. solltest Du uns genauer sagen was Du vorhast oder willst.
-
Martin Richter schrieb:
Was meinst Du mit klappt nicht?
SetFont gibt doch gar keinen Wert zurück.Nur mal als Anmerung: Wenn alle Controls z.B. in einem Dialog schon erzeugt wurden, dann hat ein nachträgliches SetFont auf den Dialog auf die Contreols keine Auswirkung mehr!
Evtl. solltest Du uns genauer sagen was Du vorhast oder willst.
Ich möchte gern im Mainframe eine Schrift erstellen, die in der dazugehörigen View genauso wie in anderen Dialogen, die während der Laufzeit erstellt werden, verwendet werden kann.
Mit dem Returnwert 0 meinte ich
CFont *pFont = GetParent()->GetFont();
- egal ob dieser Call in der View oder in einem anderen Dialog platziert wird, liefert er als Ergebnis Null zurück.
Nachdem die Mainframe OnCreate() Method vor jeder View aufgerufen wird, können keine Buttons, CStatics etc. initialisiert sein. CFont myFont stellt ein pbulic Member von der Mainframe-Class dar.
Gruß
-
SetFont in CMainFrame schein designmäßig nicht zu funktionieren.
Siehe hier
http://www.codeguru.com/forum/showthread.php?t=402234
und hier
http://www.codeproject.com/KB/GDI/setfont.aspx?msg=1683595Du solltest deinen erzeugten Font selber über eine eigene Funktion an deine Dialog weiterreichen. Eventuell auch mit einer eigenen Message.
-
Source2702 schrieb:
SetFont in CMainFrame schein designmäßig nicht zu funktionieren.
Siehe hier
http://www.codeguru.com/forum/showthread.php?t=402234
und hier
http://www.codeproject.com/KB/GDI/setfont.aspx?msg=1683595Du solltest deinen erzeugten Font selber über eine eigene Funktion an deine Dialog weiterreichen. Eventuell auch mit einer eigenen Message.
Vielen Dank für die Info. Weißt du wie ich die CFont in der Message zurückgeben muss?
LRESULT CMainFrame::OnGetFont(WPARAM wParam, LPARAM lParam) { return (LRESULT)(HFONT)m_fontb; }
-
Sieht gut aus. Versuch es mal so.
Alternativ kannst du natürlich auch die Adresse deines Objekts zurückgeben.
Dann kannst du dir das FromHandle, CreateIndirect usw. sparen.Getestet hab ich es aber nicht
-
Source2702 schrieb:
Sieht gut aus. Versuch es mal so.
Alternativ kannst du natürlich auch die Adresse deines Objekts zurückgeben.
Dann kannst du dir das FromHandle, CreateIndirect usw. sparen.Getestet hab ich es aber nicht
klappt leider immer noch nicht.... es passiert gar nichts
mein Aufruf der Funktion ist
HFONT hfont = (HFONT)AfxGetMainWnd()->SendMessage(UWM_ON_GET_FONT, 0, 0); m_font.FromHandle(hfont); //cbutton cbtntest.SetFont(&m_font);
eigentlich sollte das alles passen
-
Du kannst doch Handler für WM_GETFONT und WM_SETFONT für das Mainframe implementieren.
-
Wird die Message im Mainframe behandelt?
-
Source2702 schrieb:
Wird die Message im Mainframe behandelt?
Indem man einfach einen ON_MESSAGE Handler einbaut. Sich den HFONT castet und in einer Variable speichert... Anders wird das Windows in einem Edit-Control auch nicht machen.