CMDIChildWndEx框架中的DockPaneLeftOf

时间:2014-09-17 07:42:35

标签: c++ mfc toolbar mfc-feature-pack

我有以下代码,我想将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;
}

1 个答案:

答案 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,它读取保存的注册表数据。它可以覆盖您更改的所有工具栏设置。清除程序注册表可能会解决问题。无论何时我们更改工具栏的按钮或状态,我们都必须清除注册表以使其显示。