使用工具栏中的按钮控件下拉式
除了标准普通按钮外,工具栏还可能有一个下拉按钮。 一个下拉按钮由出现通常表示将箭头下方。
备注
,才显示该 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; }