Meldinger fra kø

Systemet kan vise et ubegrenset antall windows om gangen. For å distribuere mus og tastatur input til vinduet riktig, bruker systemet meldingskøer.

systemet opprettholder en meldingskø enkelt system og en rekke meldingskøer for tråden, én for hver GUI-tråd. For å unngå overhead av å skape en meldingskø for ikke-GUI-tråder, er alle tråder opprettet først uten en meldingskø. Programmet oppretter en tråds meldingskøen bare når tråden gjør første kall til en av Win32-bruker eller GDI-funksjoner.

Hver gang brukeren flytter musen, klikker museknappene, eller skriver på tastaturet, enhetsdriveren for musen eller tastaturet konverterer inndata til meldinger og plasserer dem i meldingskøen systemet. Systemet fjerner meldingene, én om gangen, fra meldingskøen systemet, undersøker dem å avgjøre målvinduet, og deretter legger dem inn i meldingskøen av tråden som opprettet målvinduet. En tråd meldingskøen mottar alle musen og tastaturet meldinger for windows som er opprettet av tråden. Tråden fjerner meldinger fra køen, og angir at systemet skal sende dem til riktige vinduet fremgangsmåten for behandling.

Med unntak av den WM_PAINT -melding, alltid posterer systemet meldinger på slutten av en meldingskø. Dette sikrer at et vindu mottar sin inndatameldinger i riktig først inn, først ut (FIFO) rekkefølge. WM_PAINT-melding, men holdes i køen og videresendes til vindusprosedyre bare når køen inneholder ingen andre meldinger. Flere WM_PAINT-meldinger for samme vinduet kombineres i en enkelt WM_PAINT-melding, konsolidere alle ugyldig deler av klientområdet i ett område. Å kombinere WM_PAINT-meldinger reduserer antall ganger et vindu må tegne innholdet i klientområdet.

En melding til en tråd meldingskøen posterer systemet ved å fylle en MSG -struktur, og deretter kopiere den til meldingskøen. Informasjonen i MSG inkluderer: håndtaket på vinduet som meldingen er ment, meldings-IDen, to parameterne for meldingen, tidspunktet meldingen ble bokført, og musen markøren stillingen. En tråd kan legge inn en melding til sin egen meldingskøen eller til køen av en annen tråd ved hjelp av funksjonen PostMessage eller PostThreadMessage.

Et program kan fjerne en melding fra køen ved hjelp av GetMessage -funksjonen. Undersøke en melding uten å fjerne den fra køen, kan et program bruke funksjonen PeekMessage . Denne funksjonen fyller MSG med informasjon om meldingen.

Etter fjerner en melding fra køen, kan et program bruke funksjonen DispatchMessage for å styre systemet til å sende meldingen til vinduet fremgangsmåte for behandling. DispatchMessage tar en peker til MSG som var fylt av et tidligere anrop til funksjonen GetMessage eller PeekMessage . DispatchMessage sender vindusreferansen meldings-IDen og to meldingsparametere til prosedyren vinduet, men det ikke passere tiden meldingen ble lagt inn eller mus markørposisjonen. Et program kan hente denne informasjonen ved å kalle funksjonene GetMessageTime og GetMessagePos under behandling av en melding.

En tråd kan bruke funksjonen WaitMessage for å gi kontrollen til andre tråder når den har ingen meldinger i sin meldingskøen. Funksjonen stopper tråden og returnerer ikke før en ny melding plasseres i trådens meldingskøen.

Du kan kalle SetMessageExtraInfo -funksjonen til å knytte en 32-biters verdi til gjeldende tråd meldingskøen. Deretter kall funksjonen GetMessageExtraInfo å få verdien forbundet med den siste meldingen hentet av funksjonen GetMessage eller PeekMessage.

Index