在工具栏控件中使用 Drop-Down 按钮

除了标准推送按钮,工具栏还可以有下拉按钮。 下拉按钮通常由附加的向下箭头的存在指示。

注释

仅当设置了TBSTYLE_EX_DRAWDDARROWS扩展样式时,才会显示附加的向下箭头。

当用户单击此箭头(或按钮本身(如果没有箭头)时,会将TBN_DROPDOWN通知消息发送到工具栏控件的父级。 然后,可以处理此通知并显示弹出菜单;类似于 Internet Explorer 的行为。

以下过程演示如何使用弹出菜单实现下拉工具栏按钮:

实现下拉按钮

  1. CToolBarCtrl创建对象后,使用以下代码设置TBSTYLE_EX_DRAWDDARROWS样式:

    m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
    
  2. 为任何新的(InsertButton 或 AddButtons)或将下拉按钮的现有(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
控件