本帖最后由 twins222 于 2010-03-19 15:54:01 编辑

解决方案 »

  1.   

    这个函数可是调整两个工具栏之间的位置:void CMainFrame::DockControlBarLeftOf(CToolBar *Bar, CToolBar *LeftOf)
    {
    CRect rect;
    DWORD dw;
    UINT n;

            // 让 MFC 调整所有浮动工具条的尺寸,以便GetWindowRect的到准确结果
    RecalcLayout(TRUE);
    LeftOf->GetWindowRect(&rect);
    rect.OffsetRect(1,0);
    dw=LeftOf->GetBarStyle();
    n = 0;
    n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;
    n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
    n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
    n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;

            // 当矩形使用默认参数时,DockControlBar 将在单独的一行里浮动工具条,
    // 通过计算矩形的大小来模拟工具条拖动到指定位置实现浮动。
    DockControlBar(Bar,n,&rect);
    }
      

  2.   

    void
    DockControlBarAtBottom( CFrameWnd *pFrame, CToolBar* Top, CToolBar* Bottom )
    {
    CRect rect;
    DWORD dw;
    UINT n; // 让 MFC 调整所有浮动工具条的尺寸,以便GetWindowRect的到准确结果
    pFrame->RecalcLayout( TRUE ); Top->GetWindowRect( &rect );
    rect.OffsetRect( 0, 10 );
    dw = Top->GetBarStyle();
    n = 0;
    n = ( ( dw & CBRS_ALIGN_TOP ) ) ? AFX_IDW_DOCKBAR_TOP : n;
    n = ( ( dw & CBRS_ALIGN_BOTTOM ) && n==0 ) ? AFX_IDW_DOCKBAR_BOTTOM : n;
    n = ( ( dw & CBRS_ALIGN_LEFT ) && n==0 ) ? AFX_IDW_DOCKBAR_LEFT : n;
    n = ( ( dw & CBRS_ALIGN_RIGHT ) && n==0 ) ? AFX_IDW_DOCKBAR_RIGHT : n; // 当矩形使用默认参数时,DockControlBar 将在单独的一行里浮动工具条,
    // 通过计算矩形的大小来模拟工具条拖动到指定位置实现浮动。
    pFrame->DockControlBar( Bottom, n, &rect );