Функція SendMessage використовується для відправки повідомлення безпосередньо до вікна процедури. SendMessage виклик процедури вікна і чекає, що процедура для обробки повідомлення та повернення результатів.
Повідомлення можуть бути відправлені на будь-якому вікні системи; все, що потрібно, це дескриптор вікна. Система використовує маркер для визначення, яке процедури вікна повинна з'явитися повідомлення.
Перед обробкою повідомлення, що можливо, були відправлені з інший потік, вікно процедура спочатку повинні викликати функцію InSendMessage . Якщо ця функція повертає TRUE, процедура вікна повинні зателефонувати ReplyMessage до будь-якої функції, що викликає потоку для отримання керування, як показано в нижченаведеному прикладі.
справа WM_USER + 5: Якщо (InSendMessage()) ReplyMessage(TRUE);
DialogBox (hInst, "MyDialogBox", hwndMain, MyDlgProc (DLGPROC));
Перерва
Кількість повідомлень, можуть бути відправлені до елементів керування в діалоговому вікні. Ці повідомлення керування встановити вигляд, поведінку та вміст елементів керування або отримати відомості про елементи керування. Наприклад, CB_ADDSTRING повідомлення можна додати рядок до поля зі списком, і BM_SETCHECK повідомлення можна встановити прапорець стан прапорця або перемикача.
Щоб надіслати повідомлення до елемента керування, вказавши ідентифікатор елемента керування і ручкою діалоговому вікні вікно, яке містить елемент керування використовується функція SendDlgItemMessage . Нижче прикладі взято з діалоговому вікні процедури, копіює рядок з редагувати елемент керування поле зі списком, в його списку. Приклад використовує SendDlgItemMessage відправити CB_ADDSTRING повідомлення в полі зі списком.
HWND hwndCombo;
Int cTxtLen;
PSTR pszMem;
перемикач (uMsg) {випадку WM_COMMAND: перемикання (LOWORD(wParam)) {випадку IDD_ADDCBITEM: / / отримати ручку зі списком і на / / контролювати довжину рядка у Правка / / зі списком.
hwndCombo = GetDlgItem (hwndDlg, IDD_COMBO);
cTxtLen = GetWindowTextLength(hwndCombo);
/ / Виділити пам'ять для рядка та копіювати / / рядок в пам'яті.
pszMem = (PSTR) NULL VirtualAlloc((LPVOID) (DWORD) (cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE);
GetWindowText (hwndCombo, pszMem, cTxtLen + 1);
/ / Додати рядок до списку з на / / комбо у полі і видалити рядок з з / /Edit керування списком.
Якщо (* pszMem! = NULL) {SendDlgItemMessage (hwndDlg, IDD_COMBO, CB_ADDSTRING, 0, (DWORD) (pszMem (LPSTR)));
SetWindowText (hwndCombo, (LPSTR) значення NULL);
} / / Вільний пам'ять і повернутися.
VirtualFree (pszMem, 0, MEM_RELEASE);
повертає TRUE;
/ / / / Інші команди діалоговому вікні процес.
/ /} / / / / Процес інші повідомлення діалогового вікна.
//
}