Переключение между разными лентами в приложении 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);

2

Решение

нет необходимости иметь несколько CMFCRibbonBar объекты, если вам не нужно, вы можете просто использовать CMFCRibbonBar :: LoadFromResource и тогда вам придется использовать CMFCRibbonBar :: RecalcLayout способ применить изменения в пользовательском интерфейсе.
Не забудьте проверить возвращаемое значение CMFCRibbonBar :: LoadFromResource чтобы убедиться, что загрузка прошла успешно, и очень важно, чтобы вы вызвали CMFCRibbonBar :: RecalcLayout в противном случае вы не увидите новую ленту.

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

По вопросам рекламы [email protected]