Utilizzo di pulsanti a discesa in un controllo Toolbar
Oltre ai pulsanti di scelta rapida standard, una barra degli strumenti può anche avere pulsanti a discesa. Un pulsante a discesa è in genere indicato dalla presenza di una freccia giù associata.
Nota
La freccia giù associata verrà visualizzata solo se è stato impostato lo stile esteso TBSTYLE_EX_DRAWDDARROWS.
Quando l'utente fa clic su questa freccia (o sul pulsante stesso, se non è presente alcuna freccia), viene inviato un messaggio di notifica TBN_DROPDOWN all'elemento padre del controllo barra degli strumenti. È quindi possibile gestire questa notifica e visualizzare un menu a comparsa; simile al comportamento di Internet Explorer.
La procedura seguente illustra come implementare un pulsante della barra degli strumenti a discesa con un menu a comparsa:
Per implementare un pulsante a discesa
Dopo aver creato l'oggetto
CToolBarCtrl
, impostare lo stile di TBSTYLE_EX_DRAWDDARROWS usando il codice seguente:m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
Impostare lo stile di TBSTYLE_DROPDOWN per i pulsanti nuovi (InsertButton o AddButtons) o esistenti (SetButtonInfo) che saranno pulsanti a discesa. Nell'esempio seguente viene illustrata la modifica di un pulsante esistente in un
CToolBarCtrl
oggetto :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 TBN_DROPDOWN alla classe padre dell'oggetto barra degli strumenti.
ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
Nel nuovo gestore visualizzare il menu popup appropriato. Il codice seguente illustra 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; }