使用工具栏控件中的下拉按钮
除了标准推送按钮外,工具栏还可以有下拉按钮。 下拉按钮通常由附加向下箭头表示。
注意
仅当设置了 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; }
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈