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.
//
}