Поделиться через


Управление сообщениями

В этом разделе содержатся сведения о том, как сообщения Windows используются для взаимодействия с элементами управления.

Рассматриваются следующие разделы.

Сообщения в общие элементы управления

Так как общие элементы управления являются окнами, приложение может взаимодействовать с ними с помощью распространенных сообщений Microsoft Win32, таких как WM_GETFONT или WM_SETTEXT. Кроме того, класс окон каждого общего элемента управления поддерживает набор сообщений, относящихся к элементу управления. Как правило, приложение использует SendMessage или SendDlgItemMessage для передачи сообщений в элемент управления (часто получая информацию в возвращаемом значении).

Некоторые распространенные элементы управления также имеют набор макросов, которые приложение может использовать вместо SendMessage. Макросы обычно проще использовать, чем функции. В следующем примере кода извлекается текст выбранного элемента представления дерева, сначала с помощью необработанных сообщений, а второй — с помощью эквивалентных макросов. Предположим, что он является дескриптором окна управления.

BOOL fSuccess;
WCHAR itemText[99];
TVITEM tvItem = { 0 };
tvItem.mask = TVIF_TEXT;
tvItem.cchTextMax = ARRAYSIZE(itemText);
tvItem.pszText = itemText;

// This...
tvItem.hItem = (HTREEITEM)SendMessage(hwnd, TVM_GETNEXTITEM, TVGN_CARET, NULL);
fSuccess = SendMessage(hwnd, TVM_GETITEM, 0, (LPARAM)&tvItem);

// ... is equivalent to this.
tvItem.hItem = TreeView_GetSelection(hwnd);
fSuccess = TreeView_GetItem(hwnd, &tvItem);

При изменении параметров цвета системы Windows отправляет WM_SYSCOLORCHANGE сообщение всем окнам верхнего уровня. Окно верхнего уровня должно пересылать сообщение WM_SYSCOLORCHANGE в общие элементы управления; в противном случае элементы управления не будут уведомлены об изменении цвета. Переадресация сообщения гарантирует, что цвета, используемые общими элементами управления, соответствуют тем, которые используются другими объектами пользовательского интерфейса. Например, элемент управления панели инструментов использует цвет "Трехмерные объекты" для рисования кнопок. Если пользователь изменяет цвет трехмерного объекта, но сообщение WM_SYSCOLORCHANGE не пересылается на панель инструментов, кнопки панели инструментов будут оставаться в исходном цвете (или даже измениться на сочетание старых и новых цветов) в то время как цвет других кнопок в системе изменяется.

Уведомления из элементов управления

Элементы управления — это дочерние окна, отправляющие сообщения уведомления в родительское окно, когда события, как правило, активируются входными данными пользователя, происходят в элементе управления. Приложение полагается на эти сообщения уведомлений, чтобы определить, какие действия пользователь хочет принять. За исключением строк отслеживания, которые используют сообщения WM_HSCROLL и WM_VSCROLL для уведомления их родительского элемента об изменениях, общие элементы управления отправляют уведомления как WM_COMMAND или WM_NOTIFY сообщения, как указано в справочном разделе уведомления. Как правило, старые уведомления (те, которые были в API в течение длительного времени) используют WM_COMMAND.

Параметр lParam WM_NOTIFY является адресом структуры NMHDR или адресом более крупной структуры, которая включает NMHDR в качестве первого члена. Структура содержит код уведомления и определяет общий элемент управления, отправляющий уведомление. Значение оставшихся элементов структуры, если таковые имеются, зависит от кода уведомления.

Каждый тип общего элемента управления имеет соответствующий набор кодов уведомлений. Общая библиотека элементов управления также предоставляет коды уведомлений, которые могут отправляться несколькими типами общих элементов управления. Ознакомьтесь с документацией по контролю интереса, чтобы определить, какие коды уведомлений будут отправляться и какой формат они принимают.

Пример кода, показывающий, как обрабатывать сообщения WM_NOTIFY , см. в справочном разделе для этого сообщения.

Общие справочники по элементу управления