Закрепленные и плавающие панели инструментов
Библиотека классов Microsoft Foundation поддерживает закрепленные панели инструментов. Закрепленная панель инструментов может быть присоединена или закреплена на любой стороне родительского окна или отсоединяться или плавать в собственном окне мини-фрейма. В этой статье объясняется, как использовать закрепленные панели инструментов в приложениях.
Если вы используете мастер приложений для создания скелета приложения, вам будет предложено выбрать, требуется ли закрепление панелей инструментов. По умолчанию мастер приложений создает код, который выполняет три действия, необходимые для размещения панели инструментов для закрепления в приложении:
Включите закрепление в окне кадра.
Если какие-либо из этих шагов отсутствуют, приложение отобразит стандартную панель инструментов. Последние два шага должны выполняться для каждой закрепления панели инструментов в приложении.
К другим темам, описанным в этой статье, относятся следующие:
Примеры DOCKTOOL см. в примере DOCKTOOL для MFC.
Включение закрепления в окне кадра
Чтобы закрепить панели инструментов в окне фрейма, необходимо включить окно фрейма (или назначение), чтобы разрешить закрепление. Это делается с помощью функции CFrameWnd::EnableDocking , которая принимает один параметр DWORD , являющийся набором битов стиля, указывающий, какая сторона окна кадра принимает закрепление. Если панель инструментов будет закреплена и есть несколько сторон, к которым она может быть закреплена, стороны, указанные в параметре EnableDocking
, используются в следующем порядке: сверху, внизу, слева, справа. Если вы хотите иметь возможность закрепить панели управления в любом месте, передайте CBRS_ALIGN_ANY в EnableDocking
.
Включение закрепления для панели инструментов
После подготовки назначения к закреплению необходимо подготовить панель инструментов (или источник) аналогичным образом. Вызовите CControlBar::EnableDocking для каждой панели инструментов, которую требуется закрепить, указав конечные стороны, к которым должна прикрепиться панель инструментов. Если ни одна из сторон, указанных в вызове CControlBar::EnableDocking
для сопоставления сторон, включенных для закрепления в окне кадра, панель инструментов не сможет закрепиться — она будет плавать. После того как он будет плавать, он остается плавающей панелью инструментов, не удается закрепить в окне фрейма.
Если нужный эффект является постоянно плавающей панелью инструментов, вызовите EnableDocking
параметр 0. Затем вызовите CFrameWnd::FloatControlBar. Панель инструментов остается плавающей, постоянно не в состоянии закрепить в любом месте.
Закрепление панели инструментов
Платформа вызывает CFrameWnd::D ockControlBar , когда пользователь пытается удалить панель инструментов на стороне окна кадра, который позволяет закрепить.
Кроме того, эту функцию можно вызывать в любое время, чтобы закрепить панели управления в окне кадра. Обычно это делается во время инициализации. Несколько панелей инструментов можно закрепить на определенной стороне окна кадра.
Плавающая панель инструментов
Отключение закрепленной панели инструментов от окна фрейма называется плавающей панелью инструментов. Для этого вызовите CFrameWnd::FloatControlBar . Укажите панель инструментов, которая должна быть размещена, и стиль выравнивания, определяющий, является ли плавающая панель инструментов горизонтальной или вертикальной.
Платформа вызывает эту функцию, когда пользователь перетаскивает панель инструментов из своего закрепленного расположения и удаляет ее в расположении, где закрепление не включено. Это может быть в любом месте внутри или за пределами окна фрейма. Как и при DockControlBar
инициализации, можно также вызвать эту функцию.
Реализация закрепления панелей инструментов MFC не предоставляет некоторые расширенные функции, найденные в некоторых приложениях, поддерживающих закрепление панелей инструментов. Такие функции, как настраиваемые панели инструментов, не предоставляются.
Динамическое изменение размера панели инструментов
Начиная с Версии 4.0 Visual C++ можно сделать возможным динамически для пользователей приложения изменять размер плавающих панелей инструментов. Как правило, панель инструментов имеет длинную линейную фигуру, отображаемую по горизонтали. Но вы можете изменить ориентацию панели инструментов и ее форму. Например, когда пользователь прикрепляет панель инструментов к одной из вертикальных сторон окна кадра, фигура изменяется на вертикальный макет. Кроме того, можно переделать панель инструментов в прямоугольник с несколькими строками кнопок.
Вы можете:
Укажите динамическое изменение размера в качестве характеристики панели инструментов.
Укажите фиксированный размер в качестве характеристики панели инструментов.
Чтобы обеспечить эту поддержку, существуют два новых стиля панели инструментов для использования в вызовах функции CToolBar::Create member. К ним относятся:
панель управления CBRS_SIZE_DYNAMIC является динамической.
CBRS_SIZE_FIXED панель управления исправлена.
Динамический стиль размера позволяет пользователю изменять размер панели инструментов во время его плавания, но не при закреплении. Панель инструментов "обертывает", где необходимо изменить фигуру, когда пользователь перетаскивает свои края.
Фиксированный размер сохраняет состояния оболочки панели инструментов, исправляя положение кнопок в каждом столбце. Пользователь приложения не может изменить форму панели инструментов. Панель инструментов упаковывается в назначенные места, например расположения разделителей между кнопками. Она поддерживает эту фигуру, закрепленную или плавающую панель инструментов. Эффект — это фиксированная палитра с несколькими столбцами кнопок.
Вы также можете использовать CToolBar::GetButtonStyle для возврата состояния и стиля кнопок на панели инструментов. Стиль кнопки определяет, как отображается кнопка и как она реагирует на входные данные пользователя; Состояние указывает, находится ли кнопка в состоянии оболочки.
Настройка позиций оболочки для панели инструментов фиксированного стиля
Для панели инструментов с фиксированным размером назначьте индексы кнопки панели инструментов, по которым панель инструментов будет упаковывать. В следующем коде показано, как это сделать в переопределении окна главного кадра OnCreate
:
// Get the style of the first button separator
UINT nStyle = m_wndToolBar.GetButtonStyle(3);
// Augment the state for wrapping
nStyle |= TBBS_WRAPPED;
m_wndToolBar.SetButtonStyle(3, nStyle);
// Do the same for other wrap locations ...
// Set the bar style to size fixed
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);
// Call docking/floating functions as needed ...
В примере DOCKTOOL MFC показано, как использовать функции-члены классов CControlBar и CToolBar для управления динамическим макетом панели инструментов. См. файл EDI ТБ AR. CPP в DOCKTOOL.