Freigeben über


Verwenden von DropDown-Schaltflächen in einem Symbolleisten-Steuerelement

Neben standardmäßigen Pushtasten kann eine Symbolleiste auch Dropdownschaltflächen enthalten. Eine Dropdownschaltfläche wird in der Regel durch das Vorhandensein eines angefügten Abwärtspfeils angezeigt.

Hinweis

Der angefügte Abwärtspfeil wird nur angezeigt, wenn die TBSTYLE_EX_DRAWDDARROWS erweiterte Formatvorlage festgelegt wurde.

Wenn der Benutzer auf diesen Pfeil klickt (oder auf die Schaltfläche selbst, wenn kein Pfeil vorhanden ist), wird eine TBN_DROPDOWN Benachrichtigung an das übergeordnete Element des Symbolleistensteuerelements gesendet. Sie können diese Benachrichtigung dann behandeln und ein Popupmenü anzeigen. ähnlich dem Verhalten von Internet Explorer.

Das folgende Verfahren veranschaulicht, wie Sie eine Dropdownsymbolleistenschaltfläche mit einem Popupmenü implementieren:

So implementieren Sie eine Dropdownschaltfläche

  1. Nachdem Das CToolBarCtrl Objekt erstellt wurde, legen Sie die TBSTYLE_EX_DRAWDDARROWS Formatvorlage mithilfe des folgenden Codes fest:

    m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
    
  2. Legen Sie die TBSTYLE_DROPDOWN Formatvorlage für neue Schaltflächen (InsertButton oder AddButtons) oder vorhandene (SetButtonInfo)-Schaltflächen fest, die Dropdownschaltflächen sind. Im folgenden Beispiel wird das Ändern einer vorhandenen Schaltfläche in einem CToolBarCtrl Objekt veranschaulicht:

    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. Fügen Sie der übergeordneten Klasse des Symbolleistenobjekts einen TBN_DROPDOWN Handler hinzu.

    ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
    
  4. Zeigen Sie im neuen Handler das entsprechende Popupmenü an. Der folgende Code veranschaulicht eine Methode:

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

Siehe auch

Verwenden von CToolBarCtrl
Steuerelemente