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
Nachdem CToolBarCtrl-Objekt erstellt wurde, legen Sie das TBSTYLE_EX_DRAWDDARROWS - Format, mit dem folgenden Code fest:
m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
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);
Fügen Sie einen Handler TBN_DROPDOWN der übergeordneten Klasse des Symbolleistenobjekts hinzu.
ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
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; }