Utilizzo di pulsanti a discesa in un controllo toolbar
Oltre ai pulsanti di comando standard, una barra degli strumenti può inoltre disporre di pulsanti a discesa.Un pulsante a discesa in genere indicato dalla presenza di freccia in giù associata.
[!NOTA]
La freccia in giù associata viene visualizzato solo se lo stile esteso di TBSTYLE_EX_DRAWDDARROWS è stato impostato.
Quando l'utente fa clic su questa freccia (o il pulsante stesso, se non è necessaria alcuna freccia esistente, un messaggio di notifica di TBN_DROPDOWN viene inviato al controllo padre della barra degli strumenti.È possibile quindi gestire la notifica e visualizzare un menu di scelta rapida; simile a quello di Internet Explorer.
La procedura riportata di seguito viene illustrato come implementare un pulsante della barra degli strumenti a discesa con un menu di scelta rapida:
Per implementare un pulsante a discesa
Una volta che un oggetto di CToolBarCtrl è stato creato, impostare lo stile di TBSTYLE_EX_DRAWDDARROWS , utilizzando il codice seguente:
m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
Impostare lo stile di TBSTYLE_DROPDOWN per tutti i nuovi (InsertButton o AddButtons) o i pulsanti esistenti (SetButtonInfo) che verranno pulsanti a discesa.Nell'esempio seguente viene illustrato modificare un pulsante esistente in un oggetto di 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);
Aggiungere un gestore di TBN_DROPDOWN alla classe padre dell'oggetto della barra degli strumenti.
ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
Nel nuovo gestore, visualizzare il menu di scelta rapida appropriato.Il codice seguente viene illustrato un metodo:
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; }