Окт 16

Размещение на панели инструментов других элементов управления

Панель инструментов поддерживает только кнопки, поэтому для расположения на ее поверхности какого-либо другого элемента управления следует создать дочернее окно. Наиболее часто на панель инструментов добавляются комбинированные списки (combo box).
Добавление дочернего окна элемента управления на панель инструментов связано с решением трех проблем: а) резервирование места для дочернего окна; б) обработка сообщений от дочернего окна; в) поддержка подсказки для дочернего окна.
Резервирование места под встроенный элемент управления несложно обеспечить, поместив кнопку-разделитель требуемой ширины. Напомним, что фактическая ширина кнопки-разделителя задается присваиванием нужного значения полю tbb[i].iBitmap. Обычно это значение подбирается экспериментально, исходя из желательной ширины встраиваемого элемента управления.
Уведомительные сообщения от встроенного элемента управления поступают в виде сообщений WM_COMMAND в родительское окно панели инструментов. Так как оконная процедура панели инструментов (спрятанная в недрах Windows) эти сообщения не обрабатывает, она передает их родительскому окну панели инструментов, то есть главному окну приложения. Поэтому в блоке обработки сообщения WM_COMMAND оконной процедуры WndProc необходимо предусмотреть обработку этих уведомительных сообщений.
Мы уже знаем, что панель инструментов поддерживает окна подсказок для всех своих кнопок. Но на встроенные элементы управления эта поддержка не распространяется. В следующем разделе будет показано, как решить эту проблему с помощью автономных элементов управления Tooltip.
Рассмотрим технику добавления комбинированного списка на панель инструментов на примере разработки приложения ComboInTooLbar, которое является модификацией приложения ToolBar. Цель модификации — добавить возможность выбора толщины пера, которым обводится контур рисуемой фигуры (до сих пор использовалось перо по умолчанию толщиной в 1 пиксел).
Создайте новый проект с именем ComboInTooLbar. Затем скопируйте из папки проекта ToolBar (см. листинг 8.1) в папку проекта ComboInTooLbar файлы с расширениями .срр, .h и .гс, скорректировав их имена заменой подстроки ToolBar на ComboInTooLbar. Скопируйте также файл toolbarl.bmp. Добавьте эти файлы в состав проекта. Добавьте к настройкам проекта на вкладке Link библиотеку comctl32.lib.
Откройте вкладку ResourceView в окне Workspace и вызовите редактор панелей инструментов двойным щелчком мыши на элементе IDR_T00LBAR1. Добавьте в начале панели инструментов две кнопки без изображений с идентификаторами ID_SEP.