Înregistrare ?i trimiterea de mesaje

Orice cerere poate post și să trimiteți mesaje. Ca sistemul, cererea posturi un mesaj de copiindu-l la o coadă de mesaje și trimite un mesaj prin care trece date mesaj ca argumente la o procedură de fereastra. Pentru a posta mesaje, o aplicație utilizează funcția PostMessage . Cererea poate trimite un mesaj prin apelarea SendMessage, BroadcastSystemMessage, SendMessageCallback, SendMessageTimeout, SendNotifyMessage, sau funcția SendDlgItemMessage.

O cerere de posturi de obicei un mesaj să notifice o fereastră specifice pentru a efectua o sarcină. PostMessage creează o structură de mesaj pentru mesajul și copiază mesajul coada de mesaj. Aplicației mesaj buclă în cele din urmă regăsește mesajul și expedieri aceasta procedura corespunzătoare fereastra.

O cerere de obicei trimite un mesaj să notifice o procedură fereastra pentru a efectua o sarcină imediat. Funcția SendMessage a trimite mesajul la procedura fereastra corespunzătoare în fereastra dat. Funcția așteaptă până când procedura fereastra completeaza prelucrare și apoi întoarce rezultatul mesaj. Windows părinte și fiu adesea comunică prin trimiterea de mesaje reciproc. De exemplu, o fereastră părinte care are un control de editare ca fereastra sa copil poate seta textul de control de a trimite un mesaj. Controlul poate notifica fereastra părinte schimbări pentru textul care sunt efectuate de către utilizator prin trimiterea de mesaje înapoi la mamă.

Funcția de SendMessageCallback , de asemenea, trimite un mesaj la procedura fereastra corespunzătoare în fereastra dat. Cu toate acestea, această funcție returnează imediat. După ce procedura fereastra procesează mesajul, sistemul necesită funcția de apel invers specificate. Pentru mai multe informații despre funcția de apel invers, vezi funcția SendAsyncProc.

Ocazional, poate doriți să trimiteți sau să depune?i un mesaj pentru toate ferestrele de Internet de nivel superior în sistemul. De exemplu, în cazul în care aplicarea modifică ora de sistem, acesta trebuie să notifice toate ferestrele de Internet de nivel superior despre schimbarea prin trimiterea unui WM_TIMECHANGE mesajul. Cererea poate trimite sau posta un mesaj pentru toate ferestrele de Internet de nivel superior de asteptare funcția SendMessage sau PostMessage , specificând HWND_TOPMOST în parametrul hwnd . Se poate, de asemenea, difuza un mesaj la toate cererile de funcția BroadcastSystemMessage de asteptare, specificând BSM_APPLICATIONS în parametrul lpdwRecipients.

Cererea poate înregistra un mesaj fără a specifica o fereastră. Dacă cererea furnizează un handle NULL de fereastra cand se telefoneaza PostMessage, mesajul este postat la coadă asociat cu firul de execu?ie curent. Deoarece nici un mâner fereastra este specificat, cererea trebuie să prelucreze mesaj în bucla de mesaj. Aceasta este o modalitate de a crea un mesaj care se aplică la întreaga aplicație, în loc de o fereastră specifice.

Utilizând funcția InSendMessage sau InSendMessageEx , o procedură de fereastră poate determina dacă este un mesaj trimis de un alt fir de prelucrare. Această capacitate este utilă atunci când mesajul prelucrare depinde de originea mesajul.

O eroare de programare obișnuită este să se presupună că funcția PostMessage posturi întotdeauna un mesaj. Acest lucru nu este adevărat, atunci când coada de mesaje este plina. Cererea ar trebui să verificați valoarea returnată de funcția PostMessage pentru a determina dacă mesajul a fost înregistrată și, dacă nu s-a, repost it.

Index