Wysyłanie wiadomości

Funkcja SendMessage jest używana do wysyłania wiadomości bezpośrednio do procedury okna. SendMessage wywołuje procedurę okna i czeka na tej procedury do przetwarzania wiadomości i zwracania wyniku.

Wiadomości mogą być wysyłane do dowolnego okna w systemie; wszystko, co jest wymagane jest dojście do okna. System używa dojścia do określenia, które procedurę okna powinien otrzymać wiadomość.

Przed przetworzeniem wiadomość, która może zostały wysłane z innego wątku, procedurę okna po raz pierwszy powinna wywołać funkcję InSendMessage . Jeśli funkcja ta zwraca wartość TRUE, procedurę okna powinna wywołać ReplyMessage przed wszelkich funkcji, która powoduje, że wątek na kontrolę, jak pokazano w poniższym przykładzie.

sprawa WM_USER + 5: Jeśli (InSendMessage()) ReplyMessage(TRUE); 
 
    DialogBox (hInst, "MyDialogBox", hwndMain, MyDlgProc (DLGPROC)); 
    podział 

 

Liczba wiadomości mogą być wysyłane do formantów w oknie dialogowym. Te komunikaty sterujące Ustawianie wyglądu, zachowanie i zawartość formantów lub pobierania informacji o formantach. Na przykład komunikat CB_ADDSTRING można dodać ciąg do pola kombi, a wiadomość BM_SETCHECK można ustawić stan wyboru pole wyboru lub przycisk radiowy.

Aby wysłać wiadomość do formantu, określając identyfikator formantu i uchwyt okna dialogowego pole, który zawiera formant, należy użyć funkcji SendDlgItemMessage . Poniższy przykład, pobranych z procedurę pole dialogowe kopiuje ciąg formancie edycyjnym pola kombi w jego polu listy. W przykładzie użyto SendDlgItemMessage wysłać wiadomość CB_ADDSTRING do pola kombi.

HWND hwndCombo; 
int cTxtLen; 
PSTR pszMem; 
 
Przełącznik (uMsg) {Sprawa WM_COMMAND: przełącznik (LOWORD(wParam)) {Sprawa IDD_ADDCBITEM: / / Get uchwyt pola kombi i / / kontroli długooć ciągu w edytowanie / / pola kombi. 
 
                hwndCombo = GetDlgItem (hwndDlg, IDD_COMBO); 
                cTxtLen = GetWindowTextLength(hwndCombo); 
 
                / / Przydzielić pamięci dla ciągu i kopii / / ciąg do pamięci. 
 
                pszMem = (PSTR) VirtualAlloc((LPVOID) NULL, (DWORD) (cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE); 
                GetWindowText (hwndCombo, pszMem, cTxtLen + 1); 
 
                / / Dodaj ciąg do pola listy / / kombi i usunąć ciąg z / lub edytować formant pola kombi. 
 
                Jeżeli (* pszMem! = NULL) {SendDlgItemMessage (hwndDlg, IDD_COMBO, CB_ADDSTRING, 0, (DWORD) (pszMem (LPSTR))); 
                    SetWindowText (hwndCombo, (LPSTR) NULL); 
                } / / Zwolnienia pamięci i powrotu. 
 
                VirtualFree (pszMem, 0, MEM_RELEASE); 
                Zwraca wartość PRAWDA; 
            / / / / Procesu innych poleceń dialogowego. 
            / /} / / / / Procesu inny komunikat okna dialogowego. 
    // 
 
} 

 

Index