Boeken en verzenden van berichten

Elke toepassing kan post en berichten verzenden. Als het systeem, een toepassing een bericht posten door deze te kopiŽren naar een berichtenwachtrij en stuurt een bericht door de berichtgegevens te geven als argumenten aan een venster procedure. Een toepassing gebruikt om berichten te posten, de PostMessage -functie. Een toepassing kan een boodschap door te bellen naar de SendMessage, BroadcastSystemMessage, SendMessageCallback, SendMessageTimeout, SendNotifyMessageof SendDlgItemMessage -functie.

Een toepassing berichten meestal een bericht in kennis te stellen van een specifiek venster een taak uit te voeren. PostMessage wordt een MSG -structuur voor het bericht en het bericht gekopieerd naar de berichtenwachtrij. Van de toepassing bericht loop uiteindelijk opgehaald van het bericht en verzendt het naar het juiste venster procedure.

Een toepassing meestal verzendt een bericht naar een venster procedure voor het uitvoeren van een taak onmiddellijk in kennis. De functie SendMessage verzendt het bericht naar de venster procedure overeenkomt met het opgegeven venster. De functie wacht totdat het venster procedure verwerking voltooit en vervolgens het resultaat weergegeven retourneert. Bovenliggende en onderliggende windows communiceren vaak door het verzenden van berichten naar elkaar. Een bovenliggend venster dat een edit-besturingselement als haar kind venster heeft kunt bijvoorbeeld de tekst van het besturingselement instellen door een bericht te sturen naar het. Het besturingselement kan melden dat het bovenliggende venster van veranderingen op de tekst die door de gebruiker worden uitgevoerd door het verzenden van berichten terug naar de bovenliggende.

De SendMessageCallback functie ook stuurt een bericht naar de venster procedure overeenkomt met het opgegeven venster. Deze functie retourneert echter onmiddellijk. Nadat de procedure venster het bericht verwerkt, vraagt het systeem de opgegeven callback functie. Zie voor meer informatie over de callback functie, de functie SendAsyncProc.

Af en toe, kan u wilt verzenden of een bericht naar alle vensters op het hoogste niveau in het systeem. Bijvoorbeeld, als de toepassing de systeemtijd wordt gewijzigd, het moet aankondigen alle op het hoogste niveau windows over de verandering door het sturen van een WM_TIMECHANGE bericht. Een toepassing kan verzenden of een bericht naar alle vensters op het hoogste niveau door de SendMessage of PostMessage -functie en HWND_TOPMOST in de hwnd parameter te geven. U kunt ook een bericht aan alle toepassingen uitzenden door het aanroepen van de functie BroadcastSystemMessage en BSM_APPLICATIONS in de lpdwRecipients -parameter op te geven.

Een toepassing kan een bericht zonder een venster opgeven. Als de toepassing een NULL vensteringang levert bij het aanroepen van PostMessage, is het bericht naar de wachtrij die is gekoppeld aan de huidige thread gepost. Omdat geen vensteringang wordt opgegeven, moet de toepassing het bericht in de lus bericht verwerkt. Dit is een manier om een bericht maken dat voor de gehele toepassing, in plaats van naar een specifieke venster geldt.

Met behulp van de functie InSendMessage of InSendMessageEx , een venster procedure kunt u bepalen of het een bericht wordt verzonden door een andere thread wordt verwerkt. Deze functie is handig wanneer de verwerking van berichten is afhankelijk van de oorsprong van het bericht.

Een gemeenschappelijke programmering fout is om te veronderstellen dat de PostMessage -functie altijd een bericht posten. Dit geldt niet wanneer de berichtenwachtrij vol is. Een toepassing moet de geretourneerde waarde van de PostMessage -functie om te bepalen of het bericht is gepost, en als het niet is, repost het controleren.

Index