DockPaneLeftOf in CMDIChildWndEx Frame

DockPaneLeftOf in CMDIChildWndEx Frame

本文关键字:Frame CMDIChildWndEx in DockPaneLeftOf      更新时间:2023-10-16

我有以下代码,我想将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,读取保存的注册表数据。它可以覆盖您更改的所有工具栏设置。清除程序注册表可能会有效果。每当我们更改按钮或工具栏的状态时,我们都必须清除注册表以使其出现。