Использование разворачивающихся кнопок в элементе управления панели инструментов
Помимо стандартных кнопок push-уведомлений, панель инструментов также может иметь раскрывающийся список. Кнопка раскрывающегося списка обычно обозначается наличием присоединенной стрелки вниз.
Примечание.
Прикрепленная стрелка вниз будет отображаться только в том случае, если задан ТБSTYLE_EX_DRAWDDARROWS расширенный стиль.
Когда пользователь нажимает эту стрелку (или саму кнопку, если стрелка отсутствует), ТБN_DROPDOWN уведомление отправляется родительскому элементу управления панели инструментов. Затем вы можете обработать это уведомление и отобразить всплывающее меню; аналогично поведению интернет-Обозреватель.
В следующей процедуре показано, как реализовать кнопку панели инструментов раскрывающегося списка с всплывающим меню:
Реализация раскрывающейся кнопки
CToolBarCtrl
После создания объекта задайте стиль ТБSTYLE_EX_DRAWDDARROWS с помощью следующего кода:m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
Задайте стиль ТБSTYLE_DROPDOWN для любых новых кнопок (InsertButton или AddButtons) или существующих (SetButtonInfo), которые будут раскрывающимися кнопками. В следующем примере показано изменение существующей кнопки в объекте
CToolBarCtrl
:TBBUTTONINFO tbi; tbi.dwMask = TBIF_STYLE; tbi.cbSize = sizeof(TBBUTTONINFO); m_ToolBarCtrl.GetButtonInfo(0, &tbi); tbi.fsStyle |= TBSTYLE_DROPDOWN; m_ToolBarCtrl.SetButtonInfo(0, &tbi);
Добавьте обработчик ТБN_DROPDOWN в родительский класс объекта панели инструментов.
ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
В новом обработчике отобразится соответствующее всплывающее меню. Следующий код демонстрирует один метод:
void CMyDialog::OnTbnDropDownToolBar1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTOOLBAR pToolBar = reinterpret_cast<LPNMTOOLBAR>(pNMHDR); ClientToScreen(&(pToolBar->rcButton)); // TrackPopupMenu uses screen coords CMenu menu; VERIFY(menu.LoadMenu(IDR_MENU1)); CMenu *pPopup = menu.GetSubMenu(0); if (NULL != pPopup) { pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pToolBar->rcButton.left, pToolBar->rcButton.bottom, this); } *pResult = 0; }