2014-09-19 58 views
2

我想在應用程序中的不同MDI子幀之間切換不同的色帶。我知道使用舊式菜單可能會出現這種情況,但我無法使用功能部件包功能區進行操作。在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); 

回答

1

沒有必要擁有多個CMFCRibbonBar對象,如果你不需要,你可以只使用CMFCRibbonBar::LoadFromResource,然後你將不得不使用CMFCRibbonBar::RecalcLayout方法來更改應用到用戶界面。 請記得檢查CMFCRibbonBar::LoadFromResource的返回值以確保加載成功,並且調用CMFCRibbonBar::RecalcLayout非常重要,否則您將看不到新的功能區。

+0

不幸的是,正確的答案來得太晚,但MFC標籤並沒有太多的注意ahahahh – Robson 2014-10-29 14:28:54

+0

使用上下文類別也工作得很好。 – Jak 2014-11-03 08:11:14

+0

你是對的,但有些情況下,你特別需要不同的色帶,因爲只有上下文類別是不夠的。你可以考慮像有不同的配置文件,但也有絲帶狀態可能是有用的,但我從來沒有花時間在他們身上。 – Robson 2014-11-03 10:57:23

1

我最終隱藏了原始的ribbonbar,然後加載並顯示一個新的。不知道這是否是最好的方法。

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); 
     } 
相關問題