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


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

В дополнение к стандартным кнопок панели инструментов, также может использовать кнопки со списком. Разворачивающуюся кнопку обычно отображается наличием вложенное вниз стрелки.

Примечание

Вложенное вниз стрелки появится только в том случае, если установлен расширенный стиль TBSTYLE_EX_DRAWDDARROWS.

Когда пользователь щелкнет эта стрелка (или кнопку сама, если нет стрелку отсутствует), сообщение уведомления TBN_DROPDOWN отправляется к родительскому элементу управления панели инструментов. Затем можно обработать это уведомление и отобразить контекстное меню меню; аналогично расширение функциональности Internet Explorer.

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

Реализация кнопки со списком

  1. После создания объект CToolBarCtrl создан, задать стиль TBSTYLE_EX_DRAWDDARROWS, используя следующий код:

    m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
    
  2. Задать стиль 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);
    
  3. Добавьте обработчик TBN_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

Основные понятия

Элементы управления (MFC)