Buchung und Senden von Nachrichten

Jede Anwendung kann bereitstellen und Nachrichten senden. Ähnlich dem System eine Anwendung sendet eine Nachricht, indem Sie es an eine Nachrichtenwarteschlange kopieren und sendet eine Nachricht, indem Sie die Message-Daten als Argumente an eine Fensterprozedur. Um Nachrichten zu senden, verwendet eine Anwendung die PostMessage -Funktion. Eine Anwendung kann eine Nachricht senden, durch Aufrufen der SendMessage, BroadcastSystemMessage, SendMessageCallback, SendMessageTimeout, SendNotifyMessageoder SendDlgItemMessage Funktion.

Eine Anwendung in der Regel sendet eine Nachricht zu ein bestimmtes Fenster um eine Aufgabe auszuführen. PostMessage erstellt eine MSG -Struktur für die Nachricht und kopiert die Nachricht in der Warteschlange für Nachrichten. Die Anwendung-Meldungsschleife schließlich Ruft die Nachricht ab und sendet es an die entsprechenden Fensterprozedur.

Eine Anwendung sendet in der Regel eine Nachricht um eine Fensterprozedur zum Ausführen einer Aufgabe unverzüglich zu benachrichtigen. Die SendMessage -Funktion sendet die Nachricht an die Fensterprozedur, die entsprechend des angegebenen Fensters. Die Funktion wartet, bis die Fensterprozedur Verarbeitung abgeschlossen ist und dann das Nachricht Ergebnis zurückgibt. Eltern-und Kindfenster kommunizieren oft durch Senden von Nachrichten miteinander. Beispielsweise kann ein übergeordnetes Fenster, das ein Edit-Steuerelement als seiner untergeordneten Fenster hat den Text des Steuerelements festlegen, durch Senden einer Nachricht an es. Das Steuerelement kann das übergeordnete Fenster Änderungen am Text Benachrichtigen, die vom Benutzer durch Senden von Nachrichten zurück an den übergeordneten durchgeführt werden.

Die SendMessageCallback -Funktion auch sendet eine Nachricht an die Fensterprozedur, die entsprechend des angegebenen Fensters. Diese Funktion gibt jedoch sofort zurück. Nachdem die Fensterprozedur die Nachricht verarbeitet, ruft das System die angegebene Rückruffunktion. Weitere Informationen über die Callback-Funktion finden Sie unter die SendAsyncProc -Funktion.

Gelegentlich können Sie senden oder eine Nachricht an alle Fenster der obersten Ebene im System. Beispielsweise wenn die Anwendung die Systemzeit ändert, sie teilt alle Fenster der obersten Ebene über die Änderung durch das Senden einer Nachricht WM_TIMECHANGE . Eine Anwendung kann senden oder eine Nachricht an alle Fenster der obersten Ebene von Aufrufen der Funktion SendMessage oder PostMessage und HWND_TOPMOST in der Hwnd -Parameter angeben. Sie können auch eine Nachricht an alle Anwendungen übertragen, durch Aufrufen der Funktion BroadcastSystemMessage und BSM_APPLICATIONS im LpdwRecipients -Parameter angeben.

Eine Anwendung kann eine Nachricht ohne Angabe eines Fensters. Wenn die Anwendung ein NULL-Fensterhandle beim PostMessageaufrufen liefert, wird die Nachricht an die Warteschlange, die dem aktuellen Thread zugeordnete gebucht. Da kein Fensterhandle angegeben ist, muss die Anwendung die Nachricht in der Nachrichtenschleife verarbeiten. Dies ist eine Möglichkeit zum Erstellen einer Nachricht, die für die gesamte Anwendung, anstatt für ein bestimmtes Fenster gilt.

Mit die Funktion InSendMessage oder InSendMessageEx , kann eine Fensterprozedur bestimmen, ob es eine Nachricht von einem anderen Thread verarbeitet. Diese Funktion ist nützlich, wenn die Message-Verarbeitung auf den Ursprung der Nachricht abhängt.

Ein häufige Programmierfehler ist anzunehmen, dass die PostMessage -Funktion immer eine Nachricht Posten. Dies gilt nicht, wenn die Warteschlange voll ist. Eine Anwendung sollte überprüfen Sie den Rückgabewert der PostMessage -Funktion zu bestimmen, ob die Nachricht bereitgestellt wurde, ist es nicht gewesen, veröffentlichen es.

Index