TN031. Панели элементов управления
Примечание.
Следующее техническое примечание не было обновлено, поскольку сначала оно было включено в электронную документацию. В результате некоторые процедуры и разделы могут быть устаревшими или неверными. Для получения последних сведений рекомендуется выполнить поиск интересующей темы в алфавитном указателе документации в Интернете.
В этом примечании описываются классы панели управления в MFC: общие CControlBar, CStatusBar, CToolBar, CDialogBar и CDockBar
.
Ccontrolbar
A ControlBar
— это производный CWnd
класс, который:
выравнивается по верхней или нижней части окна фрейма;
может содержать дочерние элементы, которые являются элементами управления на основе HWND (например,
CDialogBar
) или элементами, не основанными наHWND
(например,CToolBar
,CStatusBar
).
Панели элементов управления поддерживают дополнительные стили:
CBRS_TOP (по умолчанию) закрепление панели управления в верхней части.
CBRS_BOTTOM Закрепить панель управления внизу.
CBRS_NOALIGN Не переместите панель управления при изменении размера родительского элемента.
Классы, производные от CControlBar
, предоставляют более интересные реализации:
CStatusBar
строка состояния, элементы являются панелями строки состояния, содержащими текст;CToolBar
панель инструментов, элементы являются выровненными в строку кнопками с точечными рисунками;CDialogBar
фрейм в виде панели инструментов, содержащий стандартные элементы управления Windows (созданные из ресурса шаблона диалоговых окон);CDockBar
Обобщенная область док-станции для другихCControlBar
производных объектов. Определенные функции-члены и переменные, доступные в этом классе, могут измениться в будущих версиях.
Все объекты и окна панели элементов управления будут дочерними по отношению к некоторым родительским окнам фреймов. Обычно они добавляются в клиентскую область фрейма (например, клиент MDI или представление) как элементы одного уровня. Важное значение имеет идентификатор дочернего окна панели элементов управления. Макет панели элементов управления по умолчанию применяется только для панелей элементов управления с идентификаторами в диапазоне от AFX_IDW_CONTROLBAR_FIRST до AFX_IDW_CONTROLBAR_LAST. Обратите внимание, что, несмотря на существование 256 идентификаторов, особыми являются только первые 32 из них, поскольку они напрямую поддерживаются архитектурой предварительного просмотра.
Класс CControlBar
предоставляет стандартную реализацию для выполнения следующих задач:
выравнивание панели элементов управления по верхней, нижней или любой стороне фрейма;
выделение массивов элементов управления;
поддержка реализации производных классов.
Обычно объекты панели элементов управления C++ встраиваются как члены производного класса CFrameWnd
и удаляются при уничтожении родительского элемента HWND
и объекта. Если необходимо выделить объект панели управления в куче, можно просто задать элемент m_bAutoDestruct значение TRUE , чтобы вызвать панель delete this;
управления при HWND
уничтожении.
Примечание.
Если вы создаете собственный CControlBar
производный класс, а не используете один из производных классов MFC, например CStatusBar
CToolBar
, илиCDialogBar
, необходимо задать элемент данных m_dwStyle. Это можно сделать в переопределении Create
:
// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create(CWnd* pParentWnd,
DWORD dwStyle,
UINT nID)
{
m_dwStyle = dwStyle;
.
.
.
}
Алгоритм макета панели элементов управления
Алгоритм макета панели управления очень прост. Окно фрейма отправляет сообщение WM_SIZEPARENT всем дочерним элементам в диапазоне панели элементов управления. Вместе с этим сообщением передается указатель на клиентскую область родительского окна. Это сообщение отправляется дочерним элементам в Z-порядке. Дочерние элементы панели элементов управления используют эту информацию для определения своих положений и уменьшения размера клиентской области родительского окна. Конечная область, которая остается для обычной клиентской области (меньше панелей элементов управления), используется для размещения основного окна клиента (обычно это окно клиента MDI, представления или разделителя).
Дополнительные сведения см. в разделах CWnd::RepositionBars
и CFrameWnd::RecalcLayout
.
Частные сообщения Windows MFC, в том числе WM_SIZEPARENT, описаны в техническом примечание 24.
Cstatusbar
Строка состояния представляет собой панель элементов управления со строкой панелей вывода текста. Существует два основных способа использования панелей вывода текста.
В качестве строки сообщения
(Например, строка сообщения стандартного меню "Справка".) Как правило, для доступа используется отсчитываемый от нуля индекс.
В качестве индикаторов состояния
(Например, индикаторы CAP, NUM и SCRL.) Как правило, для доступа используется идентификатор строки или команды.
В качестве шрифта строки состояния используется 10-точечный MS Sans Serif (согласно руководству по созданию приложений с интерфейсом Windows или программе отображения шрифта лучше всего соответствует 10-точечный пропорциональный шрифт Swiss). В некоторых версиях Windows, например для японского языка, применяются другие шрифты.
Цвета, используемые в строке состояния, также соответствуют рекомендациям в руководстве по созданию приложений с интерфейсом Windows. Эти цвета не являются фиксированными и динамически изменяются согласно пользовательским настройкам на панели управления.
Товар | Значение COLOR Windows | RGB по умолчанию |
---|---|---|
Фон строки состояния | COLOR_BTNFACE | RGB(192, 192, 192) |
Текст строки состояния | COLOR_BTNTEXT | RGB(000, 000, 000) |
Верхняя или левая границы строки состояния | COLOR_BTNHIGHLIGHT | RGB(255, 255, 255) |
Нижняя или правая границы строки состояния | COLOR_BTNSHADOW | RGB(128, 128, 128) |
Поддержка CCmdUI для CStatusBar
Способ обновления индикаторов обычно осуществляется через механизм ON_UPDATE_COMMAND_UI. Во время простоя строка состояния вызовет обработчик ON_UPDATE_COMMAND_UI с идентификатором строки панели индикатора.
Обработчик ON_UPDATE_COMMAND_UI может вызывать:
Enable
: включение или отключение панели. Отключенная панель выглядит так же, как включенная, но текст невидим (то есть отключен индикатор текста).SetText
: чтобы изменить текст. Будьте внимательны при использовании этой функции, так как размер панели не меняется автоматически.
Подробные сведения об API создания и настройки см. в описании класса CStatusBar в справочнике по библиотеке классов CStatusBar
. Большая часть настроек строк состояния должна быть выполнена до их первоначального отображения.
Строка состояния поддерживает только одну панель растягивания, обычно первую. Размер этой панели фактически является минимальным размером. Если размер строки состояния превышает минимальный размер всех панелей, панели растягивания будет задано дополнительное значение ширины. В приложении по умолчанию со строкой состояния индикаторы для CAP, NUM и SCRL выровнены по правому краю, так как первая панель может растягиваться.
Ctoolbar
Панель инструментов представляет собой панель элементов управления со строкой кнопок с точечными рисунками, которые могут содержать разделители. Поддерживаются два стиля кнопок: нажимаемые кнопки и кнопки с флажками. Функции группы радио можно создавать с помощью кнопок проверка поля и ON_UPDATE_COMMAND_UI.
Все кнопки с точечными рисунками на панели инструментов создаются из одного точечного рисунка. Этот рисунок должен содержать одно изображение или глиф для каждой кнопки. Как правило, порядок изображений или глифов в точечном рисунке совпадает с порядком их отображения на экране. (Его можно изменить с помощью API-интерфейсов настройки.)
Все кнопки должны быть одинакового размера. Размером по умолчанию является стандарт в 24x22 пикселя. Все изображения или глифы должны иметь одинаковый размер и располагаться на точечном рисунке рядом друг с другом. Размер образа и глифов по умолчанию — 16x15 пикселей. Таким образом, для панели инструментов с 10 кнопками (имеющими стандартные размеры) потребуется точеный рисунок 160 пикселей в ширину и 15 пикселей в высоту.
Каждая кнопка имеет только одно изображение или глиф. Разные состояния и стили кнопок (например, нажата, отключена, включена, нажата и недоступна, не определена) создаются алгоритмически из этого одного изображения или глифа. Теоретически можно использовать любой цветной точечный рисунок или DIB. Алгоритм создания разных состояний кнопки работает лучше всего, если исходное изображение состоит из оттенков серого. Примеры стандартных кнопок панели инструментов и картинки кнопки панели инструментов см. в примере CLIPART MFC.
Цвета, используемые на панели инструментов, также соответствуют рекомендациям в руководстве по созданию приложений с интерфейсом Windows. Эти цвета не являются фиксированными и динамически изменяются согласно пользовательским настройкам на панели управления.
Товар | Значение COLOR Windows | RGB по умолчанию |
---|---|---|
Фон панели инструментов | COLOR_BTNFACE | RGB(192,192,192) |
Верхняя и левая границы кнопок панели инструментов | COLOR_BTNHIGHLIGHT | RGB(255,255,255) |
Нижняя и правая границы кнопок панели инструментов | COLOR_BTNSHADOW | RGB(128,128,128) |
Кроме того, цвет кнопок с точечными рисунками панели инструментов изменен так, как если бы они были стандартными элементами управления кнопок Windows. Изменение цвета происходит при загрузке точечного рисунка из ресурса и в ответ на изменение системных цветов согласно пользовательским настройкам на панели управления. Следующие цвета на точечном рисунке панели инструментов будут изменены автоматически, поэтому их следует использовать с осторожностью. Если вы не хотите изменять цвет части точечного рисунка, используйте цвет, наиболее точно соответствующий сопоставленным значениям RGB. Сопоставление выполняется на основе точных значений RGB.
Значение RGB | Динамически сопоставленное значение COLOR |
---|---|
RGB(000, 000, 000) | COLOR_BTNTEXT |
RGB(128, 128, 128) | COLOR_BTNSHADOW |
RGB(192, 192, 192) | COLOR_BTNFACE |
RGB(255, 255, 255) | COLOR_BTNHIGHLIGHT |
Подробные сведения об API создания и настройки см. в описании класса CToolBar в справочнике по библиотеке классов CToolBar
. Большая часть настроек панелей инструментов должна быть выполнена до их первоначального отображения.
API настройки можно использовать для корректировки идентификаторов, стилей, ширины кнопок и выбора изображений или глифов для конкретных кнопок. По умолчанию эти API не требуются.
Поддержка CCmdUI для CToolBar
Способ обновления кнопок панели инструментов всегда осуществляется через механизм ON_UPDATE_COMMAND_UI. Во время простоя панель инструментов вызовет обработчик ON_UPDATE_COMMAND_UI с идентификатором команды этой кнопки. ON_UPDATE_COMMAND_UI не вызывается для разделителей, но он вызывается для кнопок pushbutton и проверка поля.
Обработчик ON_UPDATE_COMMAND_UI может вызывать:
Enable
: чтобы включить или отключить кнопку. Она действует одинаково для кнопок и флажков.SetCheck
: для задания проверки состояния кнопки. При вызове этой функции для кнопки панели инструментов кнопка будет преобразована во флажок.SetCheck
принимает параметр, который может быть равен 0 (не установлен), 1 (установлен) или 2 (не определен).SetRadio
: сокращение дляSetCheck
.
Флажки являются автоматическими, то есть при их установке они сразу же изменяют состояние. Установка — это отпущенное или отключенное состояние. Встроенный в пользовательский интерфейс способ перевода кнопки в неопределенное состояние отсутствует. Для этого нужно написать код.
API настройки позволяют изменить состояние заданной кнопки панели инструментов, предпочтительно изменить эти состояния в обработчике ON_UPDATE_COMMAND_UI для команды, представленной кнопкой панели инструментов. Помните, что обработка бездействия изменит состояние кнопок панели инструментов с обработчиком ON_UPDATE_COMMAND_UI, поэтому любые изменения этих состояний, внесенные через SetButtonStyle, могут потеряться после следующего простоя.
Кнопки панели инструментов отправляют WM_COMMAND сообщения, такие как обычные кнопки или элементы меню, и обычно обрабатываются обработчиком ON_COMMAND в том же классе, который предоставляет обработчик ON_UPDATE_COMMAND_UI.
Существует четыре стиля кнопок панели инструментов (TBBS_ <значения>), используемых для отображения состояний.
TBBS_CHECKED: флажок установлен (нажат).
TBBS_INDETERMINATE: флажок не определен.
TBBS_DISABLED: кнопка отключена.
TBBS_PRESSED: кнопка нажата.
Следующие значения TBBS представляют шесть официальных стилей кнопок согласно руководству по созданию приложений с интерфейсом Windows.
Кнопка доступна — 0
Мышь Вниз = ТБBS_PRESSED (| любой другой стиль)
Кнопка недоступна — TBBS_DISABLED
Кнопка нажата — TBBS_CHECKED
Down Disabled = ТБBS_CHECKED | ТБBS_DISABLED
Неопределенное состояние кнопки — TBBS_INDETERMINATE
CDialogBar
Диалоговая панель — это панель элементов управления со стандартными элементами управления Windows. Она функционирует аналогично диалоговому окну в том, что она содержит элементы управления и поддерживает переходы между ними. Она также действует как диалоговое окно в том, что для представления панели она использует шаблон диалогового окна.
CDialogBar
используется для панели инструментов предварительного просмотра, содержащей стандартные элементы управления кнопок.
Использование CDialogBar
аналогично CFormView
. Необходимо определить шаблон диалогового окна для диалоговой панели и удалить все стили, кроме WS_CHILD. Обратите внимание, что диалоговое окно не должно отображаться.
Уведомления элементов управления для CDialogBar
отправляются родительскому элементу панели элементов (как кнопки панели инструментов).
Поддержка CCmdUI для CDialogBar
Кнопки панели диалоговых окон должны обновляться с помощью механизма обработчика ON_UPDATE_COMMAND_UI. Во время простоя диалоговое окно вызовет обработчик ON_UPDATE_COMMAND_UI с идентификатором команды всех кнопок, имеющих идентификатор = 0x8000 (то есть в диапазоне идентификаторов >команд).
Обработчик ON_UPDATE_COMMAND_UI может вызывать:
Enable: для включения и отключения кнопки.
SetText: для изменения текста кнопки.
Для настройки можно использовать стандартные API-интерфейсы диспетчера окон.
См. также
Технические примечания по номеру
Технические примечания по категории