Distacco e l'invio di messaggi

Qualsiasi applicazione può post e inviare messaggi. Come il sistema, un'applicazione posti un messaggio copiandolo in una coda di messaggi e manda un messaggio passando i dati del messaggio come argomenti a una routine della finestra. Per inviare i messaggi, un'applicazione utilizza la funzione PostMessage . Un'applicazione può inviare un messaggio tramite una chiamata SendMessage, BroadcastSystemMessage, SendMessageCallback, SendMessageTimeout, SendNotifyMessageo SendDlgItemMessage funzione.

Un'applicazione posti in genere un messaggio per notificare una finestra specifica per eseguire un'attività. PostMessage crea una struttura MSG per il messaggio e copia il messaggio dalla coda messaggi. Ciclo di messaggi dell'applicazione alla fine recupera il messaggio e lo invia alla procedura appropriata finestra.

Un'applicazione invia in genere un messaggio per notificare una routine della finestra per eseguire un'attività immediatamente. La funzione SendMessage invia il messaggio alla routine di finestra corrispondente alla finestra specificata. La funzione attende la routine della finestra completa elaborazione e quindi restituisce il risultato del messaggio. Padre e figlio windows spesso comunicare tramite l'invio di messaggi a vicenda. Ad esempio, una finestra padre che ha un controllo di modifica come sua finestra figlio può impostare il testo del controllo inviando un messaggio ad esso. Il controllo può notificare la finestra padre di modifiche al testo che sono effettuate dall'utente l'invio di messaggi all'elemento padre.

La funzione SendMessageCallback invia anche un messaggio routine di finestra corrispondente alla finestra specificata. Tuttavia, questa funzione restituisce immediatamente. Dopo che la routine della finestra elabora il messaggio, il sistema chiama la funzione di callback specificato. Per ulteriori informazioni sulla funzione di callback, vedere la funzione SendAsyncProc.

Occasionalmente, si consiglia di inviare o inviare un messaggio a tutte le finestre di primo livello nel sistema. Ad esempio, se l'applicazione cambia l'ora di sistema, esso deve notificare tutte le finestre di primo livello sulla modifica inviando un WM_TIMECHANGE messaggio. Un'applicazione può inviare o inviare un messaggio a tutte le finestre di primo livello, chiamando la funzione SendMessage o PostMessage e specificando HWND_TOPMOST nel parametro hwnd . Si può anche trasmettere un messaggio a tutte le applicazioni chiamando la funzione BroadcastSystemMessage e specificando BSM_APPLICATIONS nel parametro lpdwRecipients.

Un'applicazione può inviare un messaggio senza specificare una finestra. Se l'applicazione fornisce un handle di finestra NULL quando si chiama PostMessage, il messaggio verrà inviato alla coda associata al thread corrente. Poiché non è specificato alcun handle di finestra, l'applicazione deve elaborare il messaggio nel ciclo di messaggi. Questo è un modo per creare un messaggio che si applica all'intera applicazione, anziché a una finestra specifica.

Utilizzando la funzione InSendMessage o InSendMessageEx , una routine della finestra è in grado di determinare se elabora un messaggio inviato da un altro thread. Questa funzionalità risulta utile quando l'elaborazione del messaggio dipende l'origine del messaggio.

Un errore di programmazione comune è presumere che la funzione PostMessage posti sempre un messaggio. Questo non è vero, quando la coda dei messaggi è piena. Un'applicazione deve verificare il valore restituito della funzione per determinare se il messaggio è stato inviato e, se non è stato, ripubblicare esso PostMessage.

Rimedio: Inserire il CD-ROM CD di MSDN Library.

Index