Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ch-12_1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
456.7 Кб
Скачать

Добавление дочерних окон в панель инструментов

Панели инструментов поддерживают только кнопки, поэтому для помещения чего-либо отличного от кнопки в панель инструментов следует создать дочернее окно. Одним из наиболее частых типов окон, добавляемых в панель инструментов, являются комбинированные списки. Поэтому, комбинированные списки будут находиться в фокусе нашего рассмотрения (несмотря на то, что любой тип окна может быть расположен на панели инструментов). Поскольку основы создания дочерних окон рассмотрены в главе 8, здесь мы остановимся на некоторых подробностях: резервирование места в панели инструментов для дочернего окна, изменение размеров панели инструментов, поддержка окон подсказки.

Резервирование места для дочернего окна на панели инструментов

В книге "Programming the Windows 95 User Interface" Nancy Cluts предлагает включать разделители (кнопки стиля TBSTYLE_SEP) для сохранения пустого пространства при создании дочернего окна на панели инструментов. Вам предстоит поэкспериментировать, чтобы определить правильное число разделителей, а пока программа GADGETS, приведенная далее в этой главе, использует 20 разделителей для резервирования места для комбинированного списка.

Присутствие разделителей упрощает расчет координат для окна, которые необходимо задать при вызове функции CreateWindow. Посылается сообщение TB_GETITEMRECT для получения координат в пикселях любого элемента панели инструментов — кнопки или разделителя, и возвращается четыре координаты прямоугольника указанного элемента. Ниже показано, каким образом программа GADGETS вычисляет размеры пространства, доступного для комбинированного списка, используя макрос сообщения из файла COMMCTRL.H (находится на прилагающемся компакт-диске):

RECT r ;

int x, y, cx, cy ;

// Вычисляем координаты для комбинированного списка

ToolBar_GetItemRect ( hwndTB, 0, &r ) ;

x = r.left ;

y = r.top ;

ToolBar_GetItemRect ( hwndTB, 18, &r ) ;

cx = r.right — x + 1 ;

Левый верхний угол элемента управления устанавливается в точку с координатами (x, y), в соответствии с размерами кнопок панели инструментов. Поскольку программа GADGETS использовала 20 разделителей на своей панели инструментов, запрос положения 19-го (или 18 при отсчете с нуля) разделителя, оставляет один разделитель между правым краем комбинированного списка и первой кнопкой.

Другим значением, необходимым для помещения дочернего окна на панель инструментов, является высота, которая для большинства элементов управления будет равна высоте кнопки (r.bottom — r.top + 1), полученной из сообщения TB_GETITEMRECT. Но комбинированный список ведет себя несколько иначе, чем другие типы окон, поскольку его часть редактирования (или статическая) изменяет размер самостоятельно с тем, чтобы прийти в соответствие шрифту, и высота, передаваемая в функцию CreateWindow, есть возможная высота для ниспадающего окна. Установка значения, достаточного для нескольких строк, хороша тогда, когда вы используете для расчета данные о шрифте, получаемые от функции GetTextMetrics. Программа GADGETS этого не делает и устанавливает это значение жестко:

cy = 100 ;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]