Freigeben über


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

Neben den Standardschaltflächen kann eine Symbolleiste Dropdownschaltflächen verfügen. Eine Dropdown-Schaltfläche wird normalerweise durch das Vorhandensein eines angefügten Pfeils nach unten angegeben.

Hinweis

Der angefügte Pfeil nach unten angezeigt, wenn das TBSTYLE_EX_DRAWDDARROWS erweiterte Format festgelegt wurde.

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

Das folgende Verfahren veranschaulicht, wie eine mit Dropdown-Symbolleistenschaltfläche Popupmenü implementiert:

So eine Dropdownschaltfläche implementieren

  1. Nachdem CToolBarCtrl-Objekt erstellt wurde, legen Sie das TBSTYLE_EX_DRAWDDARROWS - Format, mit dem folgenden Code fest:

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

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

    ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
    
  4. Im neuen Handler zeigen Sie das entsprechende Popupmenü an. Im folgenden Code wird 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

Referenz

Verwenden von CToolBarCtrl

Konzepte

Steuerelemente (MFC)