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

  1. Dopo aver creato l'oggetto CToolBarCtrl , impostare lo stile di TBSTYLE_EX_DRAWDDARROWS usando il codice seguente:

    m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
    
  2. 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);
    
  3. Aggiungere un gestore TBN_DROPDOWN alla classe padre dell'oggetto barra degli strumenti.

    ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
    
  4. 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;
    }
    

Vedi anche

Uso di CToolBarCtrl
Controlli