Nachrichten filtern
-
Hi,
GetMessage wartet ja netterweise, bis eine Nachricht eintrifft. Das Problem ist, dass das Programm bei jeder Art von Nachricht fortgeführt wird.
Wie kann ich erreichen, dass GetMessage nur dann das Programm fortsetzt, wenn z.B. die Nachricht WM_MOUSEMOVE gesendet wurde?
-
GetMessage() setzt überhaupt nichts fort, es holt einfach nur Nachrichten ab und wartet sofern gerade keine da sind.
Wenn dein Programm nichts tun soll, bis WM_MOUSEMOVE kommt, darfst du halt einfach nichts tun.
Bei der Message-Loop sollte man auf jedenfall dafür sorgen das sie niemals unterbrochen wird - Niemand mag diese "Anwendung reagiert nicht"-Fensterchen die Windows dann nach 5s oder so anzeigt.
-
GetMessage() setzt überhaupt nichts fort, es holt einfach nur Nachrichten ab und wartet sofern gerade keine da sind.
Das meinte ich eigentlich auch, habe es nur nicht so treffend formuliert.
Auch wenn GetMessage wartet, wird "Anwendung reagiert nicht" trotzdem nicht angezeigt. Die Nachrichtenschleife wird somit auch nicht unterbrochen.
Nur möchte ich, dass GetMessage alle Nachrichten, ausser ein paar bestimmten, ignoriert und nur auf die wartet, die ich brauche ( z.B. WM_MOUSEMOVE ).
-
Was genau hast du vor? Die Nachrichten passieren doch eh alle deine WindowProc? - Da kannste doch quasi mit denen machen was du willst?
-
Christian schrieb:
Nur möchte ich, dass GetMessage alle Nachrichten, ausser ein paar bestimmten, ignoriert und nur auf die wartet, die ich brauche ( z.B. WM_MOUSEMOVE ).
Guck Dir mal die Funktionsbeschreibung von GetMessage() genau an. Du kannst mit passenden Parametern die Nachrichten schon im voraus wegfiltern.
Das ist doch genau das was Du brauchst, oder nicht?Falls Dir die Filterfunktion doch zu unflexibel ist, mußt Du wohl oder übel selbst nach GetMessage() die unerwünschten Messages unterdrücken.
Allerdings frage ich mich ernsthaft, für was das zusätzliche Herausfiltern gut sein soll?
Ich meine, normalerweise wertet man in einer WndProc-Funktion nur die Nachrichten aus, die man auch auswerten möchte. Alle anderen werden an DefWindowProc() weitergeleitet. Das ist im Prinzip auch schon eine Nachrichtenfilterung.Um Dir weiterhelfen zu können müßtest Du Dein Problem schon ein wenig näher erörtern, warum Du Nachrichten zusätzlich herausfiltern willst.
Martin
-
Ich versuch's mal zu erklären:
Ich schreibe eine GUI-Lib, die nur die nötigsten Nachrichten weiterleitet. Angenommen, ich brauche nur WM_MOUSEMOVE. Das kann dann etwa so aussehen:
while( true ) { WaitForAction( ); switch( GetActionType( ) ) { case WM_MOUSEMOVE: // Tu was ... break; default: // Fehler beim Auswerten der Nachricht ... break; } }WaitForAction( ) soll warten, bis WM_MOUSEMOVE gesendet wird ( natürlich hab ich später ein paar mehr ) und wenn die Nachricht nicht WM_MOUSEMOVE ist, soll weiter gewartet werden. Es wird ja ständig was gesendet, auch wenn der Benutzer gar nichts macht. Lauter exotische Dinge, die ich nicht brauche, das Programm aber in die Auswertung verzweigen lassen. So kommt das Programm immer beim Default-Zweig an und sagt, dass die Nachricht nicht ausgewertet wurde. Aber ich will sie gar nicht auswerten.
GetMessage hab ich mir angeschaut, aber das ist mir nicht flexibel genug, weil man ja nur die Art der Nachricht filtern kann.
Ich hoffe, es ist klar, was ich meine.

-
Hi,
Also klar schon aber ich sehe ehrlich gesagt keinen Sinn darin.
Mach dein default raus und alles ist gut und schön oder nicht?
Und wenn du es (warum auch immer) trotzdem brauchst dann definier dir ein Array mit den Funktionen die du brauchst und guck ob die aktuell gesendete Nachricht in diesem array ist, wenn ja lass sie durch wenn nein fang von vorne an. Wo ist also dein direktes Problem?schirrmie