小弟想实现这样的界面效果:在一个SDI工程中,怎样一开始就把窗体里的多个(至少2个)ControlBar的大小固定死,使这些大小固定的ControlBar一起占满整个窗体,各个ControlBar不能重叠。哪位大哥给个示例我,我的邮箱[email protected] 谢谢!下面是我的界面:
    |
                  | Tree ControlBar
  Main ControlBar |_____________________
                  | Grid ControlBar
                  |

解决方案 »

  1.   

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {          ....................
    if (!m_wndMainControlBar.Create(_T("Main ControlBar"), this, CSize(300, 400),  TRUE , AFX_IDW_CONTROLBAR_FIRST + 33))
    {
    return -1;
    // fail to create
    }
    m_wndMainControlBar.SetBarStyle(m_wndMainControlBar.GetBarStyle() |
    CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); m_wndMainControlBar.EnableDocking(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT); EnableDocking(CBRS_ALIGN_ANY);#ifdef _SCB_REPLACE_MINIFRAME
        m_pFloatingFrameClass = RUNTIME_CLASS(C***FrameWnd);
    #endif if (!m_TreeControlBar.Create(_T("Tree ControlBar"), this, CSize(300, 200),  TRUE , AFX_IDW_CONTROLBAR_FIRST + 33))
    {
    return -1;
    // fail to create
    }
    m_TreeControlBar.SetBarStyle(m_TreeControlBar.GetBarStyle() |
    CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); m_TreeControlBar.EnableDocking(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT); EnableDocking(CBRS_ALIGN_ANY);#ifdef _SCB_REPLACE_MINIFRAME
        m_pFloatingFrameClass = RUNTIME_CLASS(C***FrameWnd);
    #endif if (!m_GridControlBar.Create(_T("Grid ControlBar"), this, CSize(300, 200),TRUE , AFX_IDW_CONTROLBAR_FIRST + 33))
    {
    return -1;
    // fail to create
    }
    m_GridControlBar.SetBarStyle(m_GridControlBar.GetBarStyle() |
    CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); m_GridControlBar.EnableDocking(CBRS_ALIGN_LEFT|CBRS_ALIGN_RIGHT); EnableDocking(CBRS_ALIGN_ANY);#ifdef _SCB_REPLACE_MINIFRAME
        m_pFloatingFrameClass = RUNTIME_CLASS(C***FrameWnd);
    #endif         DockControlBar(&m_MainControlBar, AFX_IDW_DOCKBAR_LEFT);

    DockControlBar(&m_TreeControlBar, AFX_IDW_DOCKBAR_RIGHT); RecalcLayout();
    CRect rBar;
    m_wndDirTreeBar.GetWindowRect(rBar);
    rBar.OffsetRect(0, 1);

    DockControlBar(&m_GridControlBar, AFX_IDW_DOCKBAR_RIGHT, rBar);        return 0;
    }
      

  2.   

    TO byry(百事罐头) : 我已经把窗体分成了3个部分的,您给的 m_pFloatingFrameClass = RUNTIME_CLASS(C***FrameWnd);
    这个C***FrameWnd是不是各个子窗体?另外,到底有无必要把窗体分割成3部分?
      

  3.   

    1.m_pFloatingFrameClass是CFrameWnd的私有成员变量.2.从例子中可以看到
    #ifdef _SCB_REPLACE_MINIFRAME
        m_pFloatingFrameClass = RUNTIME_CLASS(CSCBMiniDockFrameWnd);
    #endifC***FrameWnd就是CSCBMiniDockFrameWnd,是你预定义的一种可停靠框架.3.如果你用ControlBar来做的话,就不用分割窗口,如果你把窗口进行分割,那你就不需要用ControlBar了.