Скрыть, показать, добавить или удалить кнопки с ленты? - PullRequest
0 голосов
/ 03 октября 2019

Кто-нибудь выяснил, можно ли скрыть, показать, добавить или удалить кнопку с панели ленты во время выполнения? Является ли это возможным? Я хотел бы, чтобы кнопка отображалась только в сборках DEBUG.

Ответы [ 2 ]

2 голосов
/ 04 октября 2019

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
0 голосов
/ 04 октября 2019

Вот что я придумал. Я поместил этот код сразу после строки в 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() новая категория не отображается, пока я не нажму на одну из вкладок.

Кажется, работает хорошо.

...