使用工具栏中的按钮控件下拉式

除了标准普通按钮外,工具栏还可能有一个下拉按钮。 一个下拉按钮由出现通常表示将箭头下方。

备注

,才显示该 TBSTYLE_EX_DRAWDDARROWS 扩展的样式设置,将箭头下方将显示。

当用户单击此箭头 (或按钮,因此,如果箭头不存在), TBN_DROPDOWN 通知发送到工具栏控件的父级。 然后可以处理此通知并显示弹出菜单;类似于 Internet Explorer 行为。

下面的过程演示如何实现具有弹出菜单的下拉工具栏按钮:

实现一个下拉按钮

  1. 一旦的 CToolBarCtrl 对象创建的,则使用以下代码中,将 TBSTYLE_EX_DRAWDDARROWS 样式,例如:

    m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
    
  2. 该设置将为下拉按钮的所有新 (InsertButtonAddButtons) 或现有的 (SetButtonInfo) 按钮的 TBSTYLE_DROPDOWN 样式。 下面的示例演示修改在 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. 添加一 TBN_DROPDOWN 处理程序添加到工具栏对象的父类。

    ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
    
  4. 在新的处理程序中,显示适当的弹出菜单。 下面的代码演示了方法:

    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;
    }
    

请参见

参考

使用CToolBarCtrl

概念

控件(MFC)