`提示:这里可以添加本文
提示:以下是本篇文章正文内容,下面案例可供参考
示例:。
项目 8 个参与者 除了标准推送按钮外,工具栏还可以有下拉按钮。 下拉按钮通常由附加向下箭头表示。
备注
仅当设置了 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;
}
提示:这里对文章进行总结: