Окт 16

Обмен сообщениями

После создания элемента управления общего пользования приложение управляет его действиями, посылая необходимые сообщения при помощи функции SendMessage. Для каждого типа элемента управления существуют свои специфические сообщения.
Альтернативой вызовам функции SendMessage является использование набора макросов, определенных в файле commctrl.h.
Например, для добавления элемента в дерево просмотра (Tree view) с дескриптором hwndTV необходимо послать элементу управления сообщение TVM_INSERTITEM. Это можно реализовать следующим вызовом функции SendMessage:
hltem = (HTREEITEM)SendMessage(hwndTV, TVMJNSERTITEM. 0. (LPARAMHLPTVJNSERTSTRUCT) &tvis);
Однако то же самое сообщение можно послать, используя макрос Tree View_ Insertltem:
hltem - TreeView_InsertItem (hwndTV, Stvis);
Как видно, текст с макросом выглядит значительно проще для чтения.
К сожалению, файлы Win32 содержат определения макросов не для всех элементов управления общего пользования. В файле commctrLh находятся определения макросов только для элементов управления Tab control, Tree view, List view, Animation и Header. Файл prsht.h содержит определения макросов для элемента управления Property sheet.
Как и базовые элементы управления, элементы управления общего пользования посылают своему родительскому окну уведомляющие сообщения, содержащие информацию о произошедших событиях. Но если базовые элементы управления используют сообщение WM_COMMAND, то элементы управления общего пользования обычно посылают уведомления при помощи сообщений WM_N0TIFY.
Однако не все уведомления реализуются подобным образом. Например, панель инструментов, использующая сообщение WM_N0TIFY для большинства уведомлений, посылает сообщение WM_COMMAND, когда пользователь нажимает одну из кнопок. Дело в том, что панель инструментов обычно дублирует команды меню, поэтому имеющийся код обработки сообщений WM_COMMAND от команд меню будет одновременно обрабатывать и сообщения от кнопок панели инструментов.
Еще одно исключение составляют полосы прокрутки элементов управления Slider и Spin, которые посылают сообщение WM_VSCROLL или WM_HSCROLL
Хотя каждый элемент управления общего пользования имеет свой собственный набор кодов уведомления, существует набор уведомлений, общий для всех элементов.