Aufbau der Anwendung :windows CE
-
Servus! Ich hoffe ihr lasst Euch von dem langen text nicht abschrecken
Ich arbeite an einem Projekt für eine Dolmetscher Zentrale.
Ich programmiere in Embedded Visual C++4.0 mit der MFC. Die Anwendung läuft auf einem SingleBoard PC, Visualisierung/Bedienung über Touchscreen, das ganze habe ich Dialogbasierend aufgebaut.Mein Problem: ich habe einen Dialog, den ich verändern will (Buttons färben als Markierung, bei Berührung Markierung löschen usw.)
Die Messages für die Veränderungen frage ich mit einem Timer ab, die Messages kommen von einem Bedienerpult, mit dem ich via RS232 kommuniziere.Wie krieg ich den Dialog dazu sich zu verändern, wenn ich in einem anderen Dialog oder thread nachrichten über die Veränderung erhalte ohne jedesmal einen neuen Dialog herstellen zu müssen?
Hab verschiedene Ansätze(UpdsateAllViews, RedrawWindow, alles mit Formviews machen und nicht mit Dialogen)), weiß aber nicht so richtig welchen.
...das wars....noch nicht!
Ich will zudem in jeder Ansicht(oder View oder Dialog...) oben die Uhrzeit und unten ein Logo. Beides funktioniert, steht aber in jedem Dialog in der OnPaint Methode! Die Uhrzeit wird auch noch jede Minute per Timer aktualisiert.
Wie kann man das für alle Dialoge (sind so ca. 20) bewerkstelligen?
Für Rat und tat gibts ne Mark
-
- Benachrichtige deinen Dialog mit benutzerdefinierten Messages.
- Uhrzeit/Logo-Zeichnung und Aktualisierung in eine Basisklasse verfrachten und alle deine Dialoge davon erben lassen.
-
Hi!
Gute Idee probier ich gleich mal aus!
Wie generiere ich den eigene Messages? Über den Class Wizard? oder addwindowsmessage Handler?Danke und gruß
-
#define WM_DEINE_NACHRICHT WM_USER + 1
-
Ok, also in meiner InitInstance
schreibe ich define WM_blabla....und wo bastel ich die Methode? ich brauch ja ne Methode die bei erhalt der Nachricht reagiert. z.B OnWM_Blabla...
-
das define sollte nicht in die InitInstance, sondern am besten in die Header-Datei von dem Dialog ,welcher die Nachrichten verschickt. Windowsnachrichten kannst dir einfach mal als Nummern vorstellen, an denen Windows erkennt, was es für eine Nachricht ist. und bei WM_USER gehen halt Nummern los, die man slebst verwenden darf, ohne in Konflikt mit Windows zu kommen
mit SendMessage schickst du die Nachrichten an den Dialog.
In dem Dialog, welcher die Nachricht fängt, musst du die Message-Map in der cpp-Datei anpassen und zwar mit ON_MESSAGE(<Message-ID>,<Methodenname>)
Für Methodenname gibts du den Name der Methode an, welche die Nachricht behandeln soll. Wichtig: wirklich nur den Namen angeben, kein Rückgabetyp und keine Parameterliste.
Und nun musst du die Methode in der Klassen anlegen. Als Parameterliste brauchst du 2 Parameter, auch wenn du diese nicht benötigst, sonst bekommst du Probleme im Release-Modus.
-
Ah ja, das klingt schon mal vielversprechend, ich werds ausprobieren aber erst morgen früh jetzt muss ich weg!Danke für die Tips, falls es nicht klappt weiß ich ja an wen ich mich wenden kann :p
Gruß der Fuß