eigene Klasse soll Messages empfangen können
-
Moin,
ich hab eine eigene Klasse erstellt, die nicht von irgendeiner MFC-Klasse abhängig ist. Kann diese Klasse auch PostMessages und Postthreadmessages empfangen, oder geht das nur mit MFC Klassen?
Diese Klasse heißt bei mir Messages und soll alle Fehlermeldungen von allen anderen Klassen in einer CStringList bündeln. Diese Liste kann man später über einen Webserver angezeigt bekommen.
Wenn nur eine MFC Klasse Messages empfangen kann, welche Basisklasse würde sich für so eine Klasse anbieten? Über die View oder das Mainframe möchte ich nur ungern gehen, da sie eigentlich mit dieser Klasse nichts zu tun haben. Meine Applikation ist eine SDI Applikation.
LG
Stefan
-
Wenn du Window-Messages verwenden willst, dann würde ich CWnd empfehlen.
Einfach ein 0 pixel grosses unsichtbares "message window" erstellen.Möglicherweise geht es auch über CCmdTarget, aber ich wüsste nicht wie.
Ansonsten könntest du statt Window-Messages zu verwenden auch einfach direkt eine Funktion der Klasse aufrufen.
-
Stefan Krause schrieb:
....
Diese Klasse heißt bei mir Messages und soll alle Fehlermeldungen von allen anderen Klassen in einer CStringList bündeln. ...Könntest du auf Windows-Messages verzichten, dann könnte eine Lösung sicherlich das "singleton pattern" sein.
-
was ich mir auch noch gedacht habe bzw. mir grad eingefallen ist:
man könnte dafür vielleicht auch die Application Class verwenden, die zu jeder Klasse eine private oder public Membervariable besitzt. Letztendlich stellen diese Klassen (Class Messages) ja Informationen der Applikation und somit der Application Class bereit.
CWinApp* AFXAPI AfxGetApp( );
Ich weiß bloß nicht, ob das im Sinne der Verwendung der MFC ist oder nicht. Bzw. wenn diese Membervariablen privat sind, muss natürlich eine bzw. mehrere pubic Methoden in der Application Class existieren....
Vielleicht kann mir jmd von euch kurz abreißen ob das Sinn macht, diese Membervariablen in der Applicaton Class zu installieren bzw. besser gesagt zum gutem Programmierstil mit der MFC gehört; oder ob man in die Application Class eigentlich gar nichts reinpackt...
Das einzige was ich mal gelesen habe ist, dass man die globale Variable der Application Class ("the App;) z.B. nicht außerhalb dieser Klasse verwenden soll (schlechter Programmierstil).
Gruß
Stefan
-
Die CWinApp Klasse ist ein Singleton.
In die kannst Du genau so etwas reinbauen. Ich benutze diese Klasse oft genau für solche applikations-globalen Infos.Damit ich überall an meine CWinApp Klasse ran komme baue ich eine kleine inline Funktion im App-Header ein, die den entsprechenden cats macht.
// Global Accessor inline CMyApp* GetApp() { return STATIC_DOWNCAST(CMyApp,AfxGetApp()); }
Alterntiv kannst Du ach die Variable theApp, in einen vernünftigen Namen umbenennen und einach als extern global verfügbar machen.
-
danke für deine Antwort: noch eine kleine Zusatzfrage. Verwendest du in der Application Class private oder public Membervariablen der jeweiligen Class?
Sprich ist es sinnvoll gleich direkt über diesen STATIC_DOWNCAST auf die jeweilige Variable zugreifen zu können, oder sollte man lieber eine globale Funktion (public) in der application class installieren, die dann auf die privaten Membervariablen der jeweiligen Class (Message-Class) zugreift?