我想在我的应用程序中为不同的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);
答案 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非常重要,否则您将看不到新功能区。