除了标准推送按钮,工具栏还可以有下拉按钮。 下拉按钮通常由附加的向下箭头的存在指示。
注释
仅当设置了TBSTYLE_EX_DRAWDDARROWS扩展样式时,才会显示附加的向下箭头。
当用户单击此箭头(或按钮本身(如果没有箭头)时,会将TBN_DROPDOWN通知消息发送到工具栏控件的父级。 然后,可以处理此通知并显示弹出菜单;类似于 Internet Explorer 的行为。
以下过程演示如何使用弹出菜单实现下拉工具栏按钮:
实现下拉按钮
CToolBarCtrl
创建对象后,使用以下代码设置TBSTYLE_EX_DRAWDDARROWS样式:m_ToolBarCtrl.SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
为任何新的(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);
将TBN_DROPDOWN处理程序添加到工具栏对象的父类。
ON_NOTIFY(TBN_DROPDOWN, IDC_TOOLBAR1, &CMyDialog::OnTbnDropDownToolBar1)
在新处理程序中,显示相应的弹出菜单。 以下代码演示了一种方法:
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; }