Опубликован: 17.08.2010 | Доступ: свободный | Студентов: 999 / 59 | Оценка: 4.11 / 3.89 | Длительность: 29:38:00
Самостоятельная работа 9:

Однодокументный интерфейс MFC

Анализ кода, добавленного в функцию CMainFrame::OnCreate() для IDR_TBCOLOR

Класс панели инструментов CToolBar является лишь одним из нескольких классов, которые создают окна, пригодные для ввода команды и вывода информации. Базовым классом для всей этой группы элементов управления CToolBar, CStatusBar, CControlBar, CReBar, COleResizerBar, известных под общим названием панели управления, является класс CControlBar, производный от класса CWnd. Это очень важно, поскольку означает, что все панели инструментов как наследники класса CWnd, имеют все необходимые API -функции для работы с окнами.

Класс CToolBar

Класс CToolBar является наследником класса CControlBar, который в свою очередь является наследником класса CWnd. Соответственно класс CToolBar имеет все необходимые функциональные возможности для успешного управления программным способом панелями инструментов. Рассмотрим некоторые методы, в том числе и унаследованные, класса CToolBar.

Некоторые методы класса CToolBar
Метод Пояснения
CreateEx() Создает панель инструментов
LoadToolBar() Загружает ресурс панели инструментов
CommandToIndex() Возражает индекс кнопки панели инструментов
GetButtonStyle() Возвращает целочисленное значение стиля кнопки по ее индексу
SetButtonStyle() Устанавливает стиль кнопки по ее индексу
GetItemID() Возвращает идентификатор ресурса кнопки по ее индексу
GetItenRect() Возвращает координаты размещения и размер кнопки
GetButtonText() Возвращает содержимое текстовой подсказки кнопки по ее индексу в формате CString
SetButtonText() Устанавливает для кнопки с индексом ее текстовую подсказку
GetBarStyle() Возвращает стиль (переменную типа DWORD ), установленный ранее для панели инструментов
SetBarStyle() Устанавливает стиль для панели инструментов
GetCount() Возвращает количество элементов, расположенных на панели инструментов
IsFloating() Возвращает булеву величину, указывающую, является ли в данный момент панель инструментов плавающей
IsVisible() Возвращает булеву величину, указывающую, является ли в данный момент панель инструментов видимой
GetDockingFrame() Возвращает указатель на фреймовое окно, которое является родительским для панели инструментов
EnableDocking() Посылает уведомление панели инструментов и фреймовому окну о том, что пользователям разрешено самостоятельно перемещать панель инструментов и располагать ее в других частях фреймового окна.
ShowWindow() Как член класса CWnd управляет видимостью панели инструментов как окном. При этом фон исчезнувшей панели инструментов не удается скрыть
ShowControlBar() Управляет видимостью панели инструментов более умело с сокрытием и фона. Применяется совместно с функцией RecalcLayout()
RecalcLayout() Заново создает макет в пределах рамки окна, т. е. перерасполагает заново все панели инструментов, строки состояния и все остальное в пределах рамки окна. Кроме того, данная функция передвигает созданную по умолчанию панель инструментов вверх и вниз при переключении состояния панели скрыть/отобразить
GetButtonInfo() Возвращает информацию о кнопке
SetButtonInfo() Устанавливает идентификатор, стиль и индекс пиктограммы для кнопки панели инструментов
GetToolBarCtrl() Возвращает ссылку на объект класса CToolBarCtrl
LoadBitmap() Загружает пиктограмму для панели инструментов
SetBitmap() Устанавливает писктограмму для новой панели инструментов
SetButtons() Устанавливает идентификаторы для кнопок панели инструментов
SetHeight() Устанавливает высоту панели инструментов
SetSizes() Устанавливает размеры кнопок панели инструментов
Код создания панели инструментов 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

  1. CreateEx() - создает панель инструментов с нужными свойствами в окне-рамке класса CMainFrame для экземпляра CToolBar m_wndColorBar
  2. 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(). В данном случае устанавливается стиль поведения радиокнопок в группе. Список возможных стилей кнопок приведен в таблице.

Список возможных индивидуальных стилей кнопок панели инструментов
Стиль Описание
TBBS_AUTOSIZE Вычисляет ширину кнопки в зависимости от текста кнопки
TBBS_BUTTON Создает стандартную кнопку (без фиксации)
TBBS_CHECKBOX Создает кнопку, которая действует подобно флажку. Такая кнопка переключается из состояния "выбрана" в состояние "отменить выбор" и наоборот. Иными словами, это кнопка с фиксацией, которая залипает при щелчке на ней. Для возврата в исходное состояние необходимо щелкнуть на ней еще раз
TBBS_CHECKGROUP Создает кнопку, которая действует подобно радиокнопкам (селективным кнопкам) - остается выбранной до выбора другой кнопки в группе. Фактически это комбинация стилей TBSTYLE_CHECK и TBSTYLE_GROUP
TBBS_DROPDOWN Создается кнопку, представляющую собой раскрывающийся список
TBBS_GROUP Создает кнопку, которая остается выбранной, пока не будет выбрана другая кнопка из группы
TBBS_NOPREFIX Не связывает префикс акселератора (командной клавиши) с текстом кнопки
TBBS_SEPARATOR Создает разделитель (небольшой интервал) между кнопками с обеих сторон
Александр Даниленко
Александр Даниленко
Стоит Windows 8 Pro, Visual Studio 2010 Express Edition .