Legge inn og sende meldinger

Et program kan legge inn og sende meldinger. Som systemet, et program posterer en melding ved å kopiere det til en meldingskø og sender en melding ved å sende meldingsdata som argumenter til en vindusprosedyre i. Hvis du vil legge inn meldinger, bruker et program funksjonen PostMessage . Et program kan sende en melding ved å kalle SendMessage, BroadcastSystemMessage, SendMessageCallback, SendMessageTimeout, SendNotifyMessageeller SendDlgItemMessage -funksjonen.

Et program posterer vanligvis en melding om et spesifikt vindu å utføre en oppgave. PostMessage oppretter en MSG -struktur for meldingen, og kopierer meldingen til meldingskøen. Programmets meldingsløkke til slutt henter meldingen og sender det til den aktuelle vindusprosedyre.

Et program sender vanligvis en melding for å varsle en vindusprosedyre for å utføre en oppgave umiddelbart. Funksjonen SendMessage sender meldingen til vindusprosedyre tilsvarer vinduet gitt. Funksjonen venter til prosedyren vinduet fullfører behandlingen, og returnerer deretter resultatet melding. Overordnede og underordnede windows kommunisere ofte ved å sende meldinger til hverandre. Et overordnet vindu som har en redigeringskontroll som et underordnet vindu kan for eksempel angi teksten for kontrollen ved å sende en melding til den. Kontrollen kan varsle det overordnede vinduet om endringer i teksten som utføres av brukeren ved å sende meldinger til overordnet.

Funksjonen SendMessageCallback også sender en melding i vinduet prosedyren tilsvarer vinduet gitt. Men returnerer denne funksjonen umiddelbart. Når vinduet fremgangsmåten, behandler meldingen, systemet kaller opp tilbakeringingsfunksjonen angitte. Hvis du vil ha mer informasjon om tilbakeringingsfunksjonen for, kan du se funksjonen SendAsyncProc.

Av og til kan du sender eller legger inn en melding til alle vinduer på øverste nivå i systemet. For eksempel hvis programmet endres systemtiden, det må varsle alle på øverste nivå windows om endringen ved å sende en WM_TIMECHANGE -melding. Et program kan sende eller legge inn en melding til alle vinduer på øverste nivå ved å kalle funksjonen SendMessage eller PostMessage , og å angi HWND_TOPMOST i hwnd -parameteren. Du kan også sende en melding til alle programmer ved å kalle BroadcastSystemMessage -funksjonen og angi BSM_APPLICATIONS i lpdwRecipients -parameteren.

Et program kan legge inn en melding uten å angi et vindu. Hvis programmet gir en NULL-vindusreferanse når du kaller PostMessage, posteres meldingen til køen som er tilknyttet gjeldende tråd. Fordi ingen vindusreferanse er angitt, må programmet behandle meldingen i meldingsløkke. Dette er en måte å opprette en melding som gjelder for hele programmet, i stedet for til et spesifikt vindu.

Ved å bruke funksjonen InSendMessage eller InSendMessageEx , kan en vindusprosedyre bestemme om behandling av en melding som er sendt av en annen tråd. Denne funksjonen er nyttig når meldingsbehandlingen avhenger av opprinnelsen til meldingen.

Det er en felles programmeringsfeil å anta at funksjonen PostMessage alltid innlegg en melding. Dette er ikke sant når meldingskøen er full. Et program bør sjekke returverdien for PostMessage -funksjonen til å fastslå om meldingen er bokført, og hvis det ikke har vært, hvile den.

Index