Функция SendMessage используется для отправки сообщения непосредственно к процедуре окна. SendMessage вызывает процедуру окна и ожидает этой процедуры для обработки сообщения и возвращать результат.
Сообщение может быть отправлено для любого окна в системе; все, что требуется это дескриптор окна. Система использует дескриптор для определения, какие процедуры окна должен получить сообщение.
Перед обработкой сообщения, которые отправлены из другого потока, процедуру окна сначала следует вызвать функцию InSendMessage . Если эта функция возвращает значение TRUE, процедура окна следует вызвать ReplyMessage перед какой-либо функции, вызывающего потока для элемента управления, как показано в следующем примере.
дело WM_USER + 5: если (InSendMessage()) ReplyMessage(TRUE);
Диалоговое окно (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) VirtualAlloc((LPVOID) NULL, (DWORD) (cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE);
GetWindowText (hwndCombo, pszMem, cTxtLen + 1);
/ / Добавить строку в списке поле / / комбо Вставка и удаление строки из / / редактировать элемент управления списком.
Если (* pszMem! = NULL) {SendDlgItemMessage (hwndDlg, IDD_COMBO, CB_ADDSTRING, 0, (DWORD) ((LPSTR) pszMem));
SetWindowText (hwndCombo, NULL (LPSTR));
} / / Освободить память и возвращения.
VirtualFree (pszMem, 0, MEM_RELEASE);
Возвращает значение TRUE;
/ / / / Процесс другие команды диалогового окна поле.
/ /} / / / / Процесс другие сообщения диалогового окна.
//
}