Share via


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

  1. 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);
    
  2. 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);
    
  3. Aggiungere un gestore di TBN_DROPDOWN alla classe padre dell'oggetto della barra degli strumenti.

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

Vedere anche

Riferimenti

Utilizzando CToolBarCtrl

Concetti

Controlli (MFC)