如何手动显示CMFCToolBarComboBoxButton子菜单
How to manually show CMFCToolBarComboBoxButton sub-menu?
CMFCToolBarComboBoxButton
的标准行为是有一个可点击的按钮和一个用于显示子菜单的下拉箭头。我想独立于单击的位置显示子菜单。我该怎么做?
我创建按钮的代码或多或少如下(它是从一个更大的项目中提取的,所以我为任何不太重要的代码段的缺失道歉):
// In class declaration:
CMenu m_menu;
CMFCToolBar m_toolbar;
// Where toolbar initialization takes place:
m_menu.CreateMenu();
// ... populate menu
// ID_BUTTON is the ID in the resource file for the toolbar button, 0 is the index for the button icon
CMFCToolBarMenuButton button(ID_BUTTON, m_menu.GetSafeHmenu(), 0);
m_toolbar.ReplaceButton(ID_BUTTON, button);
我已经环顾四周一段时间了,找不到相关的答案。
解决方案恰好非常简单,只需从其关联的ON_COMMAND
调用CMFCToolBarComboBoxButton
按钮的OnClick
函数即可。
// ... message map
ON_COMMAND(ID_BUTTON, OnToolbarMenuButtonClicked)
// ...
void MyWnd::OnToolbarMenuButtonClicked()
{
const int index = m_toolbar.CommandToIndex(ID_BUTTON);
auto button = (CMFCToolBarComboBoxButton*)m_toolbar.GetButton(index);
button->OnClick(NULL, TRUE);
}
这种行为没有记录在案,与常识告诉我的相反,它不会创建无限递归调用。似乎"主"按钮仍然由CMFCToolBarButton
控制,而只有"箭头按钮"由CMFCToolBarComboBoxButton
控制。
PS:显然,在问题的范围之外,OnToolbarMenuButtonClicked
可以用于非常不同的目的,例如默认操作,而子菜单包含其他不太常见的选项。
相关文章:
- 无法获取菜单选择以运行函数.C++
- C++ 中的图形菜单
- C++ 程序菜单使用做同时和切换
- 我正在尝试创建一个菜单,但我的代码一直在循环
- 触发另一个窗口的菜单按钮
- 从子菜单返回后,正确的输入至少进入验证循环一次
- C++ 我的开关格式中的循环不允许我显示菜单选项或接受输入?
- 如何为我的游戏设置主菜单场景?QT C++
- C++循环菜单时做
- 难以从 CImageList 设置菜单项位图
- 如何将我的程序添加到文件和文件夹的macOS右键单击菜单?
- 如何以编程方式显示功能区按钮的下拉菜单?
- 如何在win32的窗口类中设置动态菜单?
- 为什么我的 Do-while 循环无法在C++中运行菜单
- 我正在尝试用 c++ 制作菜单,但不明白为什么它不循环
- 如何使用IExecuteCommand和动词在上下文菜单外壳扩展中显示本地化文本和自定义图标?
- 连接资源文件中的字符串,并将其传递给菜单项字符串 (winapi) c++
- 需要帮助主菜单C++
- 获取 c++ mfc vs2015 中弹出资源菜单项的 id
- QT 窗口模式禁用菜单中的操作