有没有人知道是否可以在运行时从功能区中隐藏,显示,添加或删除按钮?可能吗?我想只在DEBUG版本中显示一个按钮。
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
这是我想出的。我将这段代码放在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()
,直到我单击其中一个选项卡,才会显示新类别。
似乎工作正常。