Стоит Windows 8 Pro, Visual Studio 2010 Express Edition . |
Однодокументный интерфейс MFC
Анализ кода, добавленного в функцию CMainFrame::OnCreate() для IDR_TBCOLOR
Класс панели инструментов CToolBar является лишь одним из нескольких классов, которые создают окна, пригодные для ввода команды и вывода информации. Базовым классом для всей этой группы элементов управления CToolBar, CStatusBar, CControlBar, CReBar, COleResizerBar, известных под общим названием панели управления, является класс CControlBar, производный от класса CWnd. Это очень важно, поскольку означает, что все панели инструментов как наследники класса CWnd, имеют все необходимые API -функции для работы с окнами.
Класс CToolBar
Класс CToolBar является наследником класса CControlBar, который в свою очередь является наследником класса CWnd. Соответственно класс CToolBar имеет все необходимые функциональные возможности для успешного управления программным способом панелями инструментов. Рассмотрим некоторые методы, в том числе и унаследованные, класса CToolBar.
Код создания панели инструментов IDR_TBCOLOR
Добавленный нами ранее в функцию CMainFrame::OnCreate() фрагмент кода
// Создать инструментальную панель // для выбора цвета и настроить ее if (!m_wndColorBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndColorBar.LoadToolBar(IDR_TBCOLOR)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create }
содержит две функции-члена класса CToolBar
- CreateEx() - создает панель инструментов с нужными свойствами в окне-рамке класса CMainFrame для экземпляра CToolBar m_wndColorBar
-
LoadToolBar() - подгружает визуальный ресурс панели инструментов в экземпляр класса CToolBar m_wndColorBar
Параметры функции CreateEx() Параметр Пояснения первый параметр Первый параметр функции является указателем на родительское окно-рамку, к которому прикрепляется создаваемая панель инструментов. Он является обязательным, остальные же параметры могут быть опущены, так как они имеют значения по умолчанию второй параметр (необязательный) Второй параметр - это стиль расположения кнопок и других элементов управления на панели инструментов. третий параметр (необязательный) Третий параметр - это непосредственно стили самой панели инструментов. Этот параметр является комбинацией стилей окна и стилей элементов управления панели инструментов. Обычно используются только два или три стиля окна, а остальные являются стилями панели инструментов. Некоторые стили самой панели инструментов приведены ниже в таблице. четвертый параметр (необязательный) Четвертый параметр (отсутствует в нашем коде) - размер границы панели инструментов. Этот параметр задается как экземпляр класса стандартного прямоугольника CRect, задающего желаемую ширину и высоту панели инструментов. По умолчанию для всех измерений прямоугольника задается нуль, а это означает, что фактические размеры панели инструментов жестко не устанавливаются пятый параметр (необязательный) Пятый параметр (отсутствует в нашем коде) - идентификатор ( ID ) дочернего окна панели инструментов. По умолчанию он равен константе AFX_IDW_TOOLBAR, но при необходимости можно указать любой необходимый идентификатор Стили размещения кнопок относительно окна (второй параметр) Стиль Описание TBSTYLE_ALTDRAG Позволяет перемещать панель инструментов (перетаскивать ее при нажатии кнопки Alt ) TBSTYLE_CHECK Задает режим поведения кнопок панели как флажков. Получаются кнопки с фиксацией, которые залипает при щелчке на них. Для возврата в исходное состояние необходимо щелкнуть повторно TBSTYLE_GROUP Кнопки панели рассматриваются как группа TBSTYLE_CUSTOMERASE Генерирует сообщение NM_CUSTOMDROW при стирании фона панели инструментов и кнопок, позволяя выбирать, когда и каким образом управлять процессом стирания фона TBSTYLE_FLAT Создает плоскую панель инструментов. Текст кнопки располагается под растровым изображением TBSTYLE_LIST Текст кнопки располагается справа от растрового изображения TBSTYLE_REGISTERDROP Используется при перетаскивании и опускании объектов на кнопки панели инструментов TBSTYLE_TOOLTIPS Создает всплывающую подсказку (элемент управления ToolTip ), которая может использоваться для отображения текста описания кнопок TBSTYLE_TRANSPARENT Создает прозрачную панель инструментов TBSTYLE_WRAPABLE Создает панель инструментов, которая может иметь несколько рядов кнопок Стили самой панели инструментов как окна (третий параметр) Стиль Описание WS_CHILD Панель инструментов создается как дочернее окно WS_VISIBLE Создается видимая сразу панель инструментов CBRS_ALIGN_TOP Позволяет прикреплять панель инструментов к верхней стороне рабочей области обрамляющего окна CBRS_ALIGN_BOTTOM Позволяет прикреплять панель инструментов к нижней стороне рабочей области обрамляющего окна CBRS_ALIGN_LEFT Позволяет прикреплять панель инструментов к левой стороне рабочей области обрамляющего окна CBRS_ALIGN_RIGHT Позволяет прикреплять панель инструментов к правой стороне рабочей области обрамляющего окна CBRS_ALIGN_ANY Позволяет прикреплять панель инструментов к любой стороне рабочей области обрамляющего окна CBRS_BORDER_TOP Если панель инструментов не прикреплена, помещает границу на верхний край панели инструментов CBRS_BORDER_BOTTOM Если панель инструментов не прикреплена, помещает границу на нижний край панели инструментов CBRS_BORDER_LEFT Если панель инструментов не прикреплена, помещает границу на левый край панели инструментов CBRS_BORDER_RIGHT Если панель инструментов не прикреплена, помещает границу на правый край панели инструментов CBRS_FLOAT_MULTI Позволяет помещать в одно плавающее мини-окно несколько панелей инструментов CBRS_TOOLTIPS Отображает всплывающие подсказки ( ToolTips ) для кнопок панелей инструментов CBRS_FLYBY Одновременно обновляет текст сообщения строки состояния и текст всплывающей подсказки ToolTip CBRS_GRIPPER Рисует область захвата на панели инструментов при ее перемещении CBRS_SIZE_DYNAMIC Позволяет изменять размеры окна панели инструментов
Код установки стилей кнопки
Рассмотрим еще один фрагмент кода, добавленного нами ранее в функцию CMainFrame::OnCreate() файла MainFrm.cpp
// Найти кнопку ID_COLOR_BLACK на инструментальной панели int iTBCtrlID = m_wndColorBar.CommandToIndex(ID_COLOR_BLACK); if(iTBCtrlID >= 0) { // Установить все кнопки так, чтобы // они действовали как радиокнопки в группе for(int i = iTBCtrlID; i < (iTBCtrlID + 8); i++) m_wndColorBar.SetButtonStyle(i, TBBS_CHECKGROUP); }
Вначале применяется функция-член CommandToIndex(), которая возвращает индекс элемента управления, под которым он числится в панели инструментов как экземпляре класса CToolBar. Учитывая, что кнопка с таким идентификатором имеет наименьшее значение ID при графической разработки панели инструментов, в экземпляре класса она имеет наименьшее значение индекса (значение 0).
Индексы всех кнопок панели как элементов объекта m_wndColorBar, идут в возрастающем порядке, поскольку в таком же порядке идут значения их идентификаторов в ресурсе панели. Значит можно перебрать все элементы экземпляра класса по порядку в цикле и установить для каждого необходимый стиль. Стиль устанавливается второй функцией-членом SetButtonStyle(). В данном случае устанавливается стиль поведения радиокнопок в группе. Список возможных стилей кнопок приведен в таблице.