SendMessage funkcia sa používa na odoslanie správy priamo na okno postupu. SendMessage funkcia volá externú procedúru okno a čaká na tento postup na spracovanie správy a vráti výsledok.
Správy je možné zaslať ľubovoľného okna v systéme; všetko, čo je potrebné je okno rukoväť. Systém používa popisovač zistiť, aký okno postup by mal dostať správu.
Pred spracovania správ, ktoré boli odoslané z iného vlákna, okno postup najprv volať funkciu InSendMessage . Ak táto funkcia vráti hodnotu TRUE, okno postup by mal zavolať ReplyMessage pred žiadnu funkciu, ktorá spôsobuje vlákno prinášať ovládací prvok, ako je to znázornené v nasledovnom príklade.
prípad WM_USER + 5: Ak (InSendMessage()) ReplyMessage(TRUE);
DialogBox (hInst, "MyDialogBox", hwndMain, MyDlgProc (DLGPROC));
prestávka
Číslo správy je možné zaslať ovládacie prvky dialógového okna. Tieto kontrolné správy nastaviť vzhľad, správanie a obsah ovládacích prvkov alebo získať informácie o kontrolách. Napríklad, CB_ADDSTRING správy môžete pridať reťazec do poľa so zoznamom a BM_SETCHECK správu môžete nastaviť stav začiarkavacie políčko alebo prepínacie tlačidlo.
Funkcia SendDlgItemMessage poslať správu na ovládací prvok, uvedie identifikátor kontroly a rúčkou dialógové okno pole, obsahujúcu ovládací prvok. Nasledujúci príklad odobraté postup dialógové okno pole skopíruje rozbaľovacie pole upraviť kontrolu reťazec do svojho zoznamu bloku. Tento príklad používa SendDlgItemMessage CB_ADDSTRING správu odoslať rozbaľovacie pole.
HWND hwndCombo;
int cTxtLen;
PSTR pszMem;
prepínač (uMsg) {prípad WM_COMMAND: prepínanie (LOWORD(wParam)) {prípad IDD_ADDCBITEM: / / získať popisovač poľa so zoznamom a / / dĺžku reťazca v poli upravte kontroly / / pole so zoznamom.
hwndCombo = GetDlgItem (hwndDlg, IDD_COMBO);
cTxtLen = GetWindowTextLength(hwndCombo);
/ / Vyhradiť pamäť pre reťazec a kópia / / reťazec do pamäte.
pszMem = (PSTR) VirtualAlloc((LPVOID) NULL, (DWORD) (cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE);
GetWindowText (hwndCombo, pszMem, cTxtLen + 1);
/ / Pridať reťazec do poľa zoznamu / / rozbaľovacie pole a odstrániť reťazec z / / ovládací prvok rozbaľovacie pole na úpravu.
Ak (* pszMem! = NULL) {SendDlgItemMessage (hwndDlg, IDD_COMBO, CB_ADDSTRING, 0, (DWORD) ((ukončený nulou LPSTR) pszMem));
SetWindowText (hwndCombo, ukončený nulou (LPSTR) NULL);
} / / Uvoľnite pamäť a návrat.
VirtualFree (pszMem, 0, MEM_RELEASE);
Vráti hodnotu pravda;
/ / / Procesu iné dialógové okno poľa príkazy.
/ /} / / / Procesu iné dialógové okno pole správy.
//
}