Mesaje din coada de așteptare

Sistemul poate afișa orice număr de windows la un moment. Pentru a distribui mouse-ul ?i tastatura de intrare în fereastra corespunzătoare, sistemul utilizează cozile de mesaje.

sistemul menține un sistem unic mesaj coadă și orice numărul de fir mesaj cozi, una pentru fiecare fir de GUI. Pentru a evita aeriene de a crea o coadă de mesaje pentru subiectele non-GUI, toate subiectele sunt create inițial fără o coadă de mesaj. Sistemul creează un fir mesaj coada numai atunci când firul face său primul apel la una din funcțiile Win32 utilizator sau GDI.

Ori de câte ori utilizatorul deplasează mouse-ul, clicuri butoanele mouse-ului sau tipuri de pe tastatură, driverul de dispozitiv pentru mouse sau tastatură convertește intrare în mesaje și le plasează în coada de mesaje de sistem. Sistemul elimină mesajele, unul la un timp, din coada de așteptare sistem de mesaj, analizează-le pentru a determina fereastra de destinație și apoi posturi-le la coada de mesaje de firul care a creat fereastra de destinație. Un fir mesaj coada primește toate mesajele mouse-ul ?i tastatura pentru windows created by firul. Firul elimină mesaje din coada de așteptare sale și direcționează sistemul pentru a trimite-le la procedura corespunzătoare fereastra de prelucrare.

Cu excep?ia de WM_PAINT mesaj, sistemul întotdeauna posturi mesaje de la sfârșitul coadă mesaj. Acest lucru asigură că o fereastră primește mesajele sale de intrare în buna primul-in, urgențele (FIFO) secvența. Mesajul WM_PAINT, cu toate acestea, este păstrat în coada de așteptare și este transmis procedura fereastră numai când coada conține alte mesaje. Mai multe mesaje de WM_PAINT pentru aceeași fereastră sunt combinate într-un singur mesaj WM_PAINT, consolidarea toate păr?ile incorectă a zonei de client într-o singură zonă. Combinarea WM_PAINT mesaje reduce numărul de ori o fereastră trebuie aspira conținutul a zonei sale de client.

Sistemul posturi un mesaj la un fir mesaj coadă de completarea structură MSG și apoi copiați-l în coada de mesaje. Informațiile din MSG include: mâner fereastra pentru care mesajul este destinat, identificatorul de mesaj, doi parametri de mesaj, timp mesajul a fost postat, precum și poziția cursorului mouse-ului. Un fir de a putea posta un mesaj la propria coadă de mesaj sau la coada de un alt fir utilizând funcția PostMessage sau PostThreadMessage.

Cererea poate elimina un mesaj din coada sa utilizând funcția GetMessage . Pentru a examina un mesaj fără a scoate-o din coada sa, o cerere utilizați funcția PeekMessage . Această funcție umple MSG cu informații despre mesajul.

După eliminarea unui mesaj din coada sa, o cerere poate funcția DispatchMessage pentru a directe sistemul de pentru a expedia mesajul la o procedură de fereastra pentru prelucrare. DispatchMessage are un indicator de la MSG care a fost umplut cu un apel anterioare pentru funcția GetMessage sau PeekMessage . DispatchMessage trece ghidajul fereastra, identificatorul de mesaj și doi parametri de mesaj la regimul fereastră, dar nu trece timpul mesajul a fost înregistrată sau mouse-ul poziția cursorului. O cerere poate prelua această informație prin apelarea funcții GetMessageTime și GetMessagePos în timp ce un mesaj de prelucrare.

Un fir poate utiliza funcția WaitMessage să cedeze controlul alte fire atunci când are mesaje în coada de așteptare sale mesaj. Funcția suspendă firul și nu se întoarce până când un mesaj nou este plasate în coada de așteptare de firul mesaj.

Puteți apela funcția SetMessageExtraInfo pentru a asocia o valoare de 32-bit cu coada lui firul de execu?ie curent de mesaj. Apoi apela funcția GetMessageExtraInfo pentru a obține valoarea asociate cu ultimul mesaj Adus de funcția GetMessage sau PeekMessage.

Index