Поделиться через


Использование разворачивающихся кнопок в элементе управления панели инструментов

Помимо стандартных кнопок push-уведомлений, панель инструментов также может иметь раскрывающийся список. Кнопка раскрывающегося списка обычно обозначается наличием присоединенной стрелки вниз.

Примечание.

Прикрепленная стрелка вниз будет отображаться только в том случае, если задан ТБSTYLE_EX_DRAWDDARROWS расширенный стиль.

Когда пользователь нажимает эту стрелку (или саму кнопку, если стрелка отсутствует), ТБN_DROPDOWN уведомление отправляется родительскому элементу управления панели инструментов. Затем вы можете обработать это уведомление и отобразить всплывающее меню; аналогично поведению интернет-Обозреватель.

В следующей процедуре показано, как реализовать кнопку панели инструментов раскрывающегося списка с всплывающим меню:

Реализация раскрывающейся кнопки

  1. CToolBarCtrl После создания объекта задайте стиль ТБSTYLE_EX_DRAWDDARROWS с помощью следующего кода:

    m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
    
  2. Задайте стиль ТБ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);
    
  3. Добавьте обработчик ТБN_DROPDOWN в родительский класс объекта панели инструментов.

    ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
    
  4. В новом обработчике отобразится соответствующее всплывающее меню. Следующий код демонстрирует один метод:

    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;
    }
    

См. также

Использование CToolBarCtrl
Controls