У меня есть следующий код, и я хочу закрепить CMFCToolBars в одной строке, но использование DockPaneLeftOf не приводит к отображению каких-либо панелей инструментов, кроме MainTools. Использование только DockPane приводит к тому, что панели инструментов отображаются ниже друг друга. Есть идеи?
BOOL CFloorFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if ((!m_ctlMainTools.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER, 2)) ||
(!m_ctlMainTools.LoadToolBar(IDR_FA_SC_TBAR)))
{
return FALSE;
}
if ((!m_ctlObjects.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER, 1)) ||
(!m_ctlObjects.LoadToolBar(IDR_FLOOR_OBJECTS)))
{
return FALSE;
}
if ((!m_ctlTools.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER, 3)) ||
(!m_ctlTools.LoadToolBar(IDR_FLOOR_TOOLS)))
{
return FALSE;
}
m_ctlMainTools.EnableDocking(CBRS_ALIGN_ANY);
m_ctlObjects.EnableDocking(CBRS_ALIGN_ANY);
m_ctlTools.EnableDocking(CBRS_ALIGN_ANY);
m_ctlLegend.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_ctlMainTools);
DockPaneLeftOf(&m_ctlObjects, &m_ctlMainTools);
DockPaneLeftOf(&m_ctlTools, &m_ctlObjects);
DockPaneLeftOf(&m_ctlLegend, &m_ctlTools);
DragAcceptFiles(TRUE);
return TRUE;
}
Возможно, вам не хватает вызова ShowPane. это работает для меня
DockPane(&m_wndEditBar);
m_wndEditBar.ShowPane(TRUE, FALSE, TRUE);
DockPaneLeftOf(&m_wndMainBar, &m_wndEditBar);
m_wndMainBar.ShowPane(TRUE, FALSE, TRUE);
M_wndEditBar появляется справа от m_wndMainBar.
Кроме того, функция CMDIFrameWndEx :: LoadFrame, в конце концов, вызывает CDockingManager :: LoadState, который считывает сохраненные данные реестра. Он может перезаписать все настройки панели инструментов, которые вы изменили. Очистка реестра программ может помочь. Каждый раз, когда мы меняем кнопку или состояние панели инструментов, мы должны очистить реестр, чтобы он появился.