从功能区隐藏、显示、添加或删除按钮?

Hide, show, add or remove buttons from ribbon?

有没有人想出是否可以在 运行 时从功能区栏隐藏、显示、添加或删除按钮?可能吗?我希望按钮仅显示在 DEBUG 版本中。

10 年前,在引入功能区资源文件之前,如果您选择功能区图形用户界面,在 CMainFrame::OnCreate 中以编程方式添加按钮实际上是唯一的方法。看起来像这样:

CMFCRibbonMainPanel* pMainPanel = m_wndRibbonBar.AddMainCategory (_T("File"), IDB_TOOLBAR_16, IDB_TOOLBAR_32);
pMainPanel->Add (new CMFCRibbonButton (ID_FILE_NEW, "&New\nStrg+N", 0, 0));
pMainPanel->Add (new CMFCRibbonButton (ID_FILE_OPEN, "&Open...\nStrg+O", 1, 1));
pMainPanel->Add (new CMFCRibbonButton (ID_FILE_SAVE, "&Save\nStrg+S", 2, 2));
pMainPanel->Add (new CMFCRibbonButton (ID_FILE_SAVE_AS, "Save &as\nStrg+U", 3, 3));
#ifdef _DEBUG
    pMainPanel->Add (new CMFCRibbonButton (ID_FILE_DEBUG_INFO, "Show &Debug Information\nStrg+D", 4, 4));
#endif

这是我想出的。我将此代码放在 InitInstance() 中调用 pFrame->LoadFrame(IDR_MAINFRAME, ...);.

的行之后
#ifdef _DEBUG
    CMFCRibbonBar* pRibbon = pFrame->GetRibbonBar();
    CMFCRibbonCategory *pCategory = pRibbon->AddCategory(_T("DEBUG"), NULL, NULL);
    CMFCRibbonPanel *pPanel = pCategory->AddPanel(_T("DEBUG"));
    pPanel->Add(new CMFCRibbonButton(ID_DEBUG_RUN, _T("Run")));
    pRibbon->RecalcLayout();
#endif

我没有找出代码来查找特定的类别(选项卡)和面板,而是决定一个新的专用类别和面板最适合我的目的。

当然,如果没有处理程序,按钮将被禁用。此外,如果不调用 RecalcLayout(),则在我单击其中一个选项卡之前不会显示新类别。

看起来效果不错。

pRibbon->RecalcLayout() 在我的代码中不够用(Visual C++ 2012) 仅在使用 pRibbon->ForceRecalcLayout()

后才出现正确的渲染