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
CToolBarCtrl
Po vytvoření objektu nastavte styl TBSTYLE_EX_DRAWDDARROWS pomocí následujícího kódu:m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
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);
Přidejte obslužnou rutinu TBN_DROPDOWN do nadřazené třídy objektu panelu nástrojů.
ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
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; }