Использование разворачивающихся кнопок в элементе управления панели инструментов
В дополнение к стандартным кнопок панели инструментов, также может использовать кнопки со списком. Разворачивающуюся кнопку обычно отображается наличием вложенное вниз стрелки.
Примечание
Вложенное вниз стрелки появится только в том случае, если установлен расширенный стиль TBSTYLE_EX_DRAWDDARROWS.
Когда пользователь щелкнет эта стрелка (или кнопку сама, если нет стрелку отсутствует), сообщение уведомления TBN_DROPDOWN отправляется к родительскому элементу управления панели инструментов. Затем можно обработать это уведомление и отобразить контекстное меню меню; аналогично расширение функциональности Internet Explorer.
В следующей процедуре показано, как реализовать кнопки панели инструментов падающую вниз с всплывающим меню:
Реализация кнопки со списком
После создания объект CToolBarCtrl создан, задать стиль TBSTYLE_EX_DRAWDDARROWS, используя следующий код:
m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
Задать стиль TBSTYLE_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);
Добавьте обработчик TBN_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; }