Invio di un messaggio

La funzione SendMessage viene utilizzata per inviare un messaggio direttamente a una routine della finestra. SendMessage chiama una routine della finestra e attende che tale procedura elaborare il messaggio e restituire un risultato.

Un messaggio puņ essere inviato a qualsiasi finestra del sistema; tutto ciņ che č richiesto č un handle di finestra. Il sistema utilizza l'handle per determinare quale routine della finestra dovrebbe ricevere il messaggio.

Prima di elaborare un messaggio in cui sono stato inviato da un altro thread, una routine della finestra deve innanzitutto chiamare la funzione InSendMessage . Se questa funzione restituisce TRUE, la routine della finestra dovrebbe chiamare ReplyMessage prima di qualsiasi funzione che provoca il thread di cedere il controllo, come illustrato nell'esempio seguente.

caso WM_USER + 5: se (InSendMessage()) ReplyMessage(TRUE); 
 
    DialogBox (hInst, "MyDialogBox", hwndMain, MyDlgProc (DLGPROC)); 
    pausa 
 

Un numero di messaggi puņ essere inviato ai controlli di una finestra di dialogo. Questi messaggi di controllo impostano l'aspetto, il comportamento e il contenuto dei controlli o recuperano informazioni sui controlli. Ad esempio, il messaggio CB_ADDSTRING puņ aggiungere una stringa a una casella combinata, e il messaggio BM_SETCHECK puņ impostare lo stato di una casella di controllo o pulsante di opzione.

Utilizzare la funzione SendDlgItemMessage per inviare un messaggio a un controllo, specificando l'identificatore del controllo e l'handle della finestra casella di dialogo che contiene il controllo. Nell'esempio, tratto da una routine di finestra di dialogo casella, copia una stringa dal controllo di modifica di una casella combinata nella sua casella di riepilogo. Nell'esempio viene utilizzato il SendDlgItemMessage per inviare un messaggio CB_ADDSTRING alla casella combinata.

HWND hwndCombo; 
int cTxtLen; 
PSTR pszMem; 
 
interruttore (uMsg) {caso WM_COMMAND: passare (LOWORD(wParam)) {caso IDD_ADDCBITEM: / / ottiene l'handle della casella combinata e il / / controllare la lunghezza della stringa in modifica / / della casella combinata. 
 
                hwndCombo = GetDlgItem (hwndDlg, IDD_COMBO); 
                cTxtLen = GetWindowTextLength(hwndCombo); 
 
                / / Allocare memoria per la stringa e copia / / stringa nella memoria. 
 
                pszMem = VirtualAlloc((LPVOID) (PSTR) NULL, (DWORD) (cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE); 
                GetWindowText (hwndCombo, pszMem, cTxtLen + 1); 
 
                / / Aggiungere la stringa alla casella di riepilogo del / / combo casella e rimuovere la stringa dal / / Modifica controllo della casella combinata. 
 
                Se (* pszMem! = NULL) {SendDlgItemMessage (hwndDlg, IDD_COMBO, CB_ADDSTRING, 0, (DWORD) (pszMem (LPSTR))); 
                    SetWindowText (hwndCombo, NULL (LPSTR)); 
                } / / Liberare la memoria e ritorno. 
 
                VirtualFree (pszMem, 0, MEM_RELEASE); 
                return TRUE; 
            / / / / Processo altri comandi della finestra di dialogo. 
            / /} / / / / Processo altri messaggi di casella di dialogo. 
    // 
 
} 
 

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

Index