Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Библиотека классов Microsoft Foundation поддерживает закрепленные панели инструментов. Закрепляемая панель инструментов может быть присоединена к любой стороне родительского окна или отсоединена и перемещена в собственное окно мини-фрейма. В этой статье объясняется, как использовать закрепленные панели инструментов в приложениях.
Если вы используете мастер приложений для создания скелета приложения, вам будет предложено выбрать, требуется ли закрепление панелей инструментов. По умолчанию мастер приложений создает код, который выполняет три действия, необходимые для размещения панели инструментов для закрепления в приложении:
Если какие-либо из этих шагов отсутствуют, приложение отобразит стандартную панель инструментов. Последние два шага должны выполняться для каждой закрепляемой панели инструментов в приложении.
К другим темам, описанным в этой статье, относятся следующие:
См. общий пример MFC DOCKTOOL для примеров.
Включение докинга в рамочном окне
Чтобы закрепить панели инструментов в окне фрейма, необходимо включить окно фрейма (или назначение), чтобы разрешить закрепление. Это делается с помощью функции CFrameWnd::EnableDocking , которая принимает один параметр DWORD , являющийся набором битов стиля, указывающий, какая сторона окна кадра принимает закрепление. Если панель инструментов будет закреплена и есть несколько сторон, к которым она может быть закреплена, стороны, указанные в параметре EnableDocking
, используются в следующем порядке: сверху, внизу, слева, справа. Если вы хотите иметь возможность закрепить панели управления в любом месте, передайте CBRS_ALIGN_ANY в EnableDocking
.
Включение функции закрепления для панели инструментов
После того как вы подготовите место для стыковки, необходимо аналогичным образом подготовить панель инструментов (или источник).
Вызовите CControlBar::EnableDocking для каждой панели инструментов, которую хотите закрепить, указав целевые стороны, к которым должна прикрепиться панель инструментов. Если ни одна из сторон, указанных в вызове CControlBar::EnableDocking
, не совпадает со сторонами, включенными для закрепления в окне рамки, панель инструментов не сможет закрепиться — она будет находиться в свободном состоянии. После того как она будет отсоединена, она остаётся плавающей панелью инструментов, которую нельзя закрепить в окне фрейма.
Если вы хотите, чтобы эффект был в виде постоянно плавающей панели инструментов, вызовите EnableDocking
с параметром 0. Затем вызовите CFrameWnd::FloatControlBar. Панель инструментов остается плавающей и не может быть закреплена ни в одном месте.
Закрепление панели инструментов
Платформа вызывает CFrameWnd::DockControlBar, когда пользователь пытается прикрепить панель инструментов к стороне оконной рамки, допускающей закрепление.
Кроме того, эту функцию можно вызывать в любое время, чтобы закрепить панели управления в окне кадра. Обычно это делается во время инициализации. Несколько панелей инструментов можно закрепить на определенной стороне окна рамки.
Плавающая панель инструментов
Открепление закрепленной панели инструментов от окна фрейма называется её перемещением в свободное положение. Для этого вызовите CFrameWnd::FloatControlBar . Укажите панель инструментов, которая должна быть размещена, и стиль выравнивания, определяющий, является ли плавающая панель инструментов горизонтальной или вертикальной.
Фреймворк вызывает эту функцию, когда пользователь перетаскивает панель инструментов из своего закрепленного положения и перемещает ее в место, где закрепление невозможно. Это может быть в любом месте внутри или за пределами окна фрейма. Как и в случае с DockControlBar
, эту функцию можно также вызвать во время инициализации.
Реализация закрепляемых панелей инструментов в MFC не предоставляет некоторые расширенные функции, присутствующие в некоторых приложениях, поддерживающих плавающие панели инструментов. Такие функции, как настраиваемые панели инструментов, не предоставляются.
Динамическое изменение размера панели инструментов
Начиная с Версии 4.0 Visual C++ можно сделать возможным динамически для пользователей приложения изменять размер плавающих панелей инструментов. Как правило, панель инструментов имеет длинную линейную фигуру, отображаемую по горизонтали. Но вы можете изменить ориентацию панели инструментов и ее форму. Например, когда пользователь прикрепляет панель инструментов к одной из вертикальных сторон оконной рамы, расположение меняется на вертикальное. Кроме того, можно переделать панель инструментов в прямоугольник с несколькими строками кнопок.
Вы можете:
Укажите динамическое изменение размера в качестве характеристики панели инструментов.
Укажите фиксированный размер в качестве характеристики панели инструментов.
Чтобы обеспечить эту поддержку, существуют два новых стиля панели инструментов для использования в вызовах функции CToolBar::Create member. В их число входят:
CBRS_SIZE_DYNAMIC Панель управления является динамической.
CBRS_SIZE_FIXED Панель управления закреплена.
Динамический стиль изменения размера позволяет пользователю изменять размер панели инструментов в свободном состоянии, но не в закрепленном состоянии. Панель инструментов изменяет форму в зависимости от необходимости, когда пользователь перетаскивает ее края.
Фиксированный размер сохраняет состояния оболочки панели инструментов, исправляя положение кнопок в каждом столбце. Пользователь приложения не может изменить форму панели инструментов. Панель инструментов переносится в назначенных местах, например там, где находятся разделители между кнопками. Она сохраняет эту форму, независимо от закрепления или плавающего расположения панели инструментов. Эффект — это фиксированная палитра с несколькими столбцами кнопок.
Вы также можете использовать CToolBar::GetButtonStyle для возврата состояния и стиля кнопок на панели инструментов. Стиль кнопки определяет, как отображается кнопка и как она реагирует на входные данные пользователя; Состояние указывает, находится ли кнопка в состоянии оболочки.
Настройка позиций переноса для панели инструментов Fixed-Style
Для панели инструментов с фиксированным размером укажите индексы кнопок панели инструментов, на которых панель инструментов будет переноситься. В следующем коде показано, как это сделать в переопределении окна главного кадра 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 для управления динамическим макетом панели инструментов. См. файл EDITBAR. CPP в DOCKTOOL.