Sdílet prostřednictvím


Použití rozevíracích tlačítek v ovládacím prvku panel nástrojů

Kromě standardních tlačítek může panel nástrojů obsahovat také rozevírací tlačítka. Rozevírací tlačítko je obvykle označeno přítomností připojené šipky dolů.

Poznámka

Připojená šipka dolů se zobrazí pouze v případě, že je nastavený TBSTYLE_EX_DRAWDDARROWS rozšířený styl.

Když uživatel klikne na tuto šipku (nebo na tlačítko samotné, pokud není k dispozici žádná šipka), odešle se zpráva s oznámením TBN_DROPDOWN nadřazené ovládacího prvku panelu nástrojů. Toto oznámení pak můžete zpracovat a zobrazit místní nabídku; podobně jako chování aplikace Internet Explorer.

Následující postup ukazuje, jak implementovat tlačítko rozevíracího panelu nástrojů s místní nabídkou:

Implementace rozevíracího tlačítka

  1. CToolBarCtrl Po vytvoření objektu nastavte styl TBSTYLE_EX_DRAWDDARROWS pomocí následujícího kódu:

    m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
    
  2. Nastavte styl TBSTYLE_DROPDOWN pro všechna nová tlačítka (InsertButton nebo AddButtons) nebo existující tlačítka (SetButtonInfo), která budou rozevíracími tlačítky. Následující příklad ukazuje úpravu existujícího tlačítka v objektu 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. Přidejte obslužnou rutinu TBN_DROPDOWN do nadřazené třídy objektu panelu nástrojů.

    ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
    
  4. V nové obslužné rutině zobrazte příslušnou místní nabídku. Následující kód ukazuje jednu metodu:

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

Viz také

Používání atributu CToolBarCtrl
Ovládací prvky