隐藏,显示,添加或删除功能区上的按钮?

问题描述 投票:0回答:2

有没有人知道是否可以在运行时从功能区中隐藏,显示,添加或删除按钮?可能吗?我想只在DEBUG版本中显示一个按钮。

c++ mfc ribbon cmfcribbonpanel
2个回答
1
投票

10年前,在引入功能区资源文件之前,如果您选择功能区gui,实际上,在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

0
投票

这是我想出的。我将这段代码放在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(),直到我单击其中一个选项卡,才会显示新类别。

似乎工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.