首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以编程方式显示功能区按钮的下拉菜单?

如何以编程方式显示功能区按钮的下拉菜单?
EN

Stack Overflow用户
提问于 2020-01-03 22:38:06
回答 1查看 456关注 0票数 0

我已经添加了一组子项的功能区按钮。当用户点击按钮下面的小箭头时,就会显示这样的项目。当按钮本身被点击时,我想显示这样的下拉菜单。我该怎么做呢?

我最初的想法是在用户单击按钮时以编程方式显示菜单。我已经能够在工具栏(here)上做同样的事情,但是在ribbons上使用类似的解决方案会产生无限的递归:

代码语言:javascript
复制
// ...
ON_COMMAND(ID_RIBBON_BUTTON, &MainFrame::OnButtonClicked)
// ...

CMFCRibbonPanel *panel = /* initialization */
CMFCRibbonButton *button = new CMFCRibbonButton(ID_RIBBON_BUTTON, "Caption");
panel->Add(button);

CMFCRibbonButton *item1 = new CMFCRibbonButton(ID_RIBBON_BUTTON, "Item 1");
button->AddSubItem(item1);
CMFCRibbonButton *item2 = new CMFCRibbonButton(ID_RIBBON_BUTTON, "Item 2");
button->AddSubItem(item2);

// ...
void MainFrame::OnButtonClicked()
{
  if (auto button = static_cast<CMFCRibbonButton *>(m_ribbons.wndRibbonBar.FindByID(ID_RIBBON_BUTTON))) {

    // button->OnClick({}); // <- causes infinite recursion

    // What to do here?
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-03 22:38:06

到目前为止,我找到的最简单的方法是使用受保护的方法CMFCRibbonButton::OnShowPopupMenu。它意味着派生CMFCRibbonButton类并更改方法的可见性:

代码语言:javascript
复制
#include <afxribbonbutton.h>

class CMyMFCRibbonButton : public CMFCRibbonButton {
public:
  using CMFCRibbonButton::CMFCRibbonButton;

  virtual void OnShowPopupMenu() override {
    CMFCRibbonButton::OnShowPopupMenu();
  }
};

// ...
ON_COMMAND(ID_RIBBON_BUTTON, &MainFrame::OnButtonClicked)
// ...

CMFCRibbonPanel *panel = /* initialization */
CMyMFCRibbonButton *button = new CMyMFCRibbonButton(ID_RIBBON_BUTTON, "Caption");
panel->Add(button);

CMFCRibbonButton *item1 = new CMFCRibbonButton(ID_RIBBON_BUTTON, "Item 1");
button->AddSubItem(item1);
CMFCRibbonButton *item2 = new CMFCRibbonButton(ID_RIBBON_BUTTON, "Item 2");
button->AddSubItem(item2);

// ...
void MainFrame::OnButtonClicked()
{
  if (auto button = static_cast<CMyMFCRibbonButton*>(m_ribbons.wndRibbonBar.FindByID(ID_RIBBON_BUTTON))) {
    button->OnShowPopupMenu();
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59580442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档