Trimiterea unui mesaj

Funcția SendMessage este utilizat pentru a trimite un mesaj direct la o procedură de fereastra. SendMessage apelează o procedură fereastră și așteaptă pentru această procedură pentru a procesa mesajul și returnează un rezultat.

Un mesaj se trimite la orice fereastră în sistem; tot ce este necesar este un mâner de fereastra. Sistemul utilizează ghidajul pentru a determina care fereastra procedură ar trebui să primească mesajul.

Înainte de prelucrare un mesaj care poate au fost trimise la un alt fir, o procedură de fereastra prima ar trebui să apel funcția InSendMessage . Dacă această funcție întoarce TRUE, fereastra procedura ar trebui să apel ReplyMessage înainte de orice funcție care provoacă firul să cedeze controlul, a?a cum se arată în exemplul următor.

cazul WM_USER + 5: dacă (InSendMessage()) ReplyMessage(TRUE); 
 
    DialogBox (hInst, "MyDialogBox", hwndMain, MyDlgProc (DLGPROC)); 
    pauză 

 

Un număr de mesaje pot fi trimise la controalele din caseta de dialog. Aceste mesaje de control seta aspectul, comportament, și conținutul de controale sau prelua informații despre controalele. De exemplu, mesajul CB_ADDSTRING pot adăuga un șir de o casetă combo, și mesajul BM_SETCHECK puteți seta starea selectare de o casetă de selectare sau un buton radio.

Utilizați funcția SendDlgItemMessage pentru a trimite un mesaj la un control, specificând identificatorul de control și mâner fereastra caseta de dialog care conține controlul. Următorul exemplu, luate dintr-o procedură de caseta de dialog, copiază un șir de caractere dintr-o casetă combo Editare control în sale caseta listă. Exemplu utilizează SendDlgItemMessage pentru a trimite un mesaj CB_ADDSTRING pentru caseta combo.

HWND hwndCombo; 
int cTxtLen; 
PSTR pszMem; 
 
Switch (uMsg) {caz WM_COMMAND: Comutați (LOWORD(wParam)) {caz IDD_ADDCBITEM: / / Get ghidajul a casetei combo și / / controlul lungimea șirului în editare / / a casetei combo. 
 
                hwndCombo = GetDlgItem (hwndDlg, IDD_COMBO); 
                cTxtLen = GetWindowTextLength(hwndCombo); 
 
                / / Alocă memorie pentru șir și copie / / șir în memorie. 
 
                pszMem = (PSTR) VirtualAlloc((LPVOID) NULL, (DWORD) (cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE); 
                GetWindowText (hwndCombo, pszMem, cTxtLen + 1); 
 
                / / Add șirul în caseta listă a / / combo caseta și elimina șirul din / / editare control a casetei combo. 
 
                Dacă (* pszMem! = NULL) {SendDlgItemMessage (hwndDlg, IDD_COMBO, CB_ADDSTRING, 0, (DWORD) (pszMem (LPSTR))); 
                    SetWindowText (hwndCombo, NULL (LPSTR)); 
                } / / Drum liber memorie și reveni. 
 
                VirtualFree (pszMem, 0, MEM_RELEASE); 
                întoarce TRUE; 
            / / / / Procesa alte comenzi de caseta de dialog. 
            / /} / / / / Procesa alte mesaje de caseta de dialog. 
    // 
 
} 

 

Index