在MDI应用程序中切换不同的色带

时间:2014-09-19 06:43:40

标签: c++ mfc ribbon mdi mfc-feature-pack

我想在我的应用程序中为不同的MDI子帧切换不同的色带。我知道可以使用旧式菜单,但我无法使用功能包色带。

旧样式菜单时使用的代码:

pDocTemplate = new CMultiDocTemplate(
    IDR_MAINFRAME,//Menu to load
    RUNTIME_CLASS(CModDoc),
    RUNTIME_CLASS(CModFrame), // custom MDI child frame
    RUNTIME_CLASS(CdotView));
if (!pDocTemplate)
    return FALSE;
AddDocTemplate(pDocTemplate);

pDocTemplate = new CMultiDocTemplate(
    IDR_RES_RNGACTIV,//Menu to load
    RUNTIME_CLASS(CModRangeDoc),
    RUNTIME_CLASS(CModRangeFrame), //custom MDI child frame
    RUNTIME_CLASS(CBlankView));
if (!pDocTemplate)
    return FALSE;
AddDocTemplate(pDocTemplate);

我想到的另一种方法是卸载当前功能区并从资源加载新功能区?

//Unload ribbon code?
m_wndRibbonBar.LoadFromResource(IDR_RIBBON);

2 个答案:

答案 0 :(得分:1)

我最后隐藏了原始的功能区,然后加载并显示一个新的功能区。不确定这是否是最佳方式。

    CMultiDocTemplate *pDoc = GetDocTemplate(7);
    if (pDoc)
    {
        CFloorActivDoc* pDocument = (CFloorActivDoc*)pDoc->CreateNewDocument();
        CFloorFrame* pFrame = (CFloorFrame*)pDoc->CreateNewFrame(pDocument, NULL);
        if (pFrame)
        {
            pDoc->InitialUpdateFrame(pFrame, pDocument);
            m_wndRibbonBar.ShowPane(FALSE, FALSE, TRUE);//Hide original ribbon
            m_FloorRibbonBar.Create(this);
            m_FloorRibbonBar.LoadFromResource(IDR_RIBBON_FLOORACT);
        }

答案 1 :(得分:1)

如果您不需要,则无需拥有多个CMFCRibbonBar个对象,您只需使用CMFCRibbonBar::LoadFromResource,然后您就必须使用CMFCRibbonBar::RecalcLayout方法来申请用户界面的更改。 请务必检查CMFCRibbonBar::LoadFromResource的返回值以确保加载成功,并且调用CMFCRibbonBar::RecalcLayout非常重要,否则您将看不到新功能区。