我有以下代码,我想将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;
}
答案 0 :(得分:1)
也许您错过了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,它读取保存的注册表数据。它可以覆盖您更改的所有工具栏设置。清除程序注册表可能会解决问题。无论何时我们更改工具栏的按钮或状态,我们都必须清除注册表以使其显示。