Fehelrhafte Nachrichtenschleifen und ihre Folgen

By dose | July 30, 2006
Under: technical stuff, Uncategorized

In einer meiner Applikationen habe ich einen sehr merkwürdigen Bug beim Verhalten einer Combobox bemerkt:
Die Combobox ließ sich zwar ganz normal öffnen, indem man auf den dropdown-Pfeil klickt, allerdings ließen sich beispielsweise keinerlei Items mittels der Maus darin auswählen (mit der Tastatur funktionierte es allerdings).
Auch zuklappen konnte man das Dropdown-Feld nicht mehr. Einzig, wenn man ESC drückte, wurden die zuvor ausgeführten Ereignisse abgearbeitet (klcikte man z.B. auf den Dropdown-Pfeil und es tat sich nichts und drückte man dann ESC, so klappe das Auswahlfeld kurz ein und dann wieder aus, weil der MAusklick von zuvoir nun verarbeitet wurde).
Nach einigem Rätselraten ob des merkwürdigen Effekts bin ich schließlich auf folgenden News-Beitrag gestoßen, der die Problematik erklärt:
Das Dropdown-Menü ist ein seperates Top-Level Fenster, dessen Nachrichten natürlich auch verarbeitet werden müssen. Das Problem war demnach in meiner Nachrichtenschleife, in welcher ich in meiner GetMessage-Funktion nur die Nachrichten meines Hauptfensters und dessen Unterfenster verarbeitete und nicht alle Nachrichten, was das merkwürdige Problem verursachte.
Mach sollte der GetMessage-Funktion in der Haupt-Nachrichtenschleife also wenn möglich immer das NULL-Handle übergeben, damit alle Nachrichten verarbeitet werden können. Konkret also:


while (GetMessage(&msg, NULL, 0, 0))
if (!IsDialogMessage(&msg, hDlg)) TranslateMessage(&msg), DispatchMessage(&msg);

Leave a Comment

Name:

E-Mail :

Subscribe :
Website :

Comments :