如何手动显示 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);
找了半天没找到相关的答案。
解决方案非常简单,只需调用 CMFCToolBarComboBoxButton
按钮关联的 ON_COMMAND
按钮的 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);
}
此行为没有记录,而且与常识告诉我的相反,它不会创建无限递归调用。 "main"按钮似乎仍然由CMFCToolBarButton
控制,而只有"arrow-button"按钮由CMFCToolBarComboBoxButton
控制。
PS:显然,并且超出了问题的范围,OnToolbarMenuButtonClicked
可以用于非常不同的目的,例如默认操作,而子菜单包含其他较少-常用选项。
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);
找了半天没找到相关的答案。
解决方案非常简单,只需调用 CMFCToolBarComboBoxButton
按钮关联的 ON_COMMAND
按钮的 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);
}
此行为没有记录,而且与常识告诉我的相反,它不会创建无限递归调用。 "main"按钮似乎仍然由CMFCToolBarButton
控制,而只有"arrow-button"按钮由CMFCToolBarComboBoxButton
控制。
PS:显然,并且超出了问题的范围,OnToolbarMenuButtonClicked
可以用于非常不同的目的,例如默认操作,而子菜单包含其他较少-常用选项。