Księgowanie i wysyłanie wiadomości

Każdy wniosek można zaksięgować i wysyłać wiadomości. Jak system aplikacji księguje wiadomość kopiując je do kolejki wiadomości i wysyła wiadomość przekazując dane wiadomości jako argumenty do procedury okna. Aby wysyłać wiadomości, aplikacja używa funkcji PostMessage . Aplikacja może wysłać wiadomość przez wywołanie SendMessage, BroadcastSystemMessage, SendMessageCallback, SendMessageTimeout, SendNotifyMessagelub SendDlgItemMessage funkcji.

Aplikacja księguje zazwyczaj komunikat powiadamiający określone okno do wykonania zadania. PostMessage tworzy strukturę MSG wiadomości i kopie wiadomości do kolejki wiadomości. Pętla komunikatów aplikacji ostatecznie pobiera komunikat i wysyła go do procedury odpowiedniego okna.

Aplikacja zwykle wysyła komunikat powiadamiający procedurę okna niezwłocznie wykonać zadanie. Funkcja SendMessage wysyła wiadomość do procedury okna odpowiadające danym oknem. Funkcja czeka, aż procedurę okna zakończeniu przetwarzania, a następnie zwraca wynik wiadomości. Nadrzędnych i podrzędnych systemu windows często komunikować się przez wysyłanie wiadomości do siebie nawzajem. Na przykład okno nadrzędne, zawierający formant edycyjny jako jego okno podrzędne można ustawić tekst formantu przez wysłanie wiadomości do niego. Formant można powiadomić okno nadrzędne zmian do tekstu, które są przeprowadzane przez użytkownika przez wysłanie wiadomości do obiektu nadrzędnego.

Funkcja SendMessageCallback również wysyła wiadomość do procedury okna odpowiadające danym oknem. Jednak ta funkcja zwraca niezwłocznie. Po procedurę okna przetwarza wiadomość, system wywołuje funkcję określoną wywołania zwrotnego. Aby uzyskać więcej informacji na temat funkcji wywołania zwrotnego zobacz opis funkcji SendAsyncProc.

Czasami może chcesz wysłać lub ogłosić wiadomość do wszystkich okien najwyższego poziomu w systemie. Na przykład, jeżeli aplikacji zmiany czasu systemowego, musi powiadomić wszystkich okien najwyższego poziomu o zmianach wysyłając WM_TIMECHANGE wiadomości. Aplikację można wysłać lub ogłosić wiadomość do wszystkich okien najwyższego poziomu przez wywołanie funkcji SendMessage lub PostMessage i określając HWND_TOPMOST w parametrze hwnd . Można również emitować wiadomości do wszystkich aplikacji wywołanie funkcji BroadcastSystemMessage i określając BSM_APPLICATIONS w parametrze lpdwRecipients.

Aplikacja może ogłosić wiadomość bez określania okna. Jeżeli aplikacji dostaw uchwyt okna NULL podczas wywoływania PostMessage, wiadomość jest księgowana kolejki skojarzony z bieżącym wątkiem. Ponieważ nie uchwyt okna jest określony, stosowania muszą przetworzyć wiadomość w pętli komunikatów. Jest to jeden ze sposobów aby utworzyć komunikat, który stosuje się do całej aplikacji, zamiast do określonego okna.

Przy użyciu funkcji InSendMessage lub InSendMessageEx , procedurę okna można określić, czy jest przetwarzanie wiadomości wysłanej przez inny wątek. Możliwość ta jest przydatna podczas przetwarzania wiadomości zależy od pochodzenia wiadomości.

Typowym błędem programowania jest zakładać, że funkcja PostMessage zawsze księguje wiadomości. Jest to nie Prawda gdy kolejka wiadomości jest zapełniona. Aplikacja powinna sprawdzić wartość zwracana przez funkcję PostMessage do określenia, czy wiadomość została zaksięgowana i, jeśli nie została, opublikować ponownie go.

Index