1,我的程序中有多个工具栏,在逐一创建之后,显示出来后,经常位置错乱,不知有什么好方法能控制各个工具栏的初始位置。(有记忆特性是更好)
2,我的一个自继承悬浮工具栏,移动到主窗体之外的时候,如果动作稍快,就很容易的移动到桌面之外,无法“拖”回来,请教各位大虾如何解决?(不重新运行程序)

解决方案 »

  1.   

    1.你给每个工具栏都分配不同的id了吗
    2。try CFrameWnd::LoadBarState() and CFrameWnd::SaveBarState()
      

  2.   

    参考。
    CFrameWnd* FloatControlBar( CControlBar * pBar, CPoint point, DWORD dwStyle = CBRS_ALIGN_TOP );void DockControlBar( CControlBar * pBar, UINT nDockBarID = 0, LPCRECT lpRect = NULL );
      

  3.   

    1.第二个Toolbar定位在第一个Toolbar旁边。
    DockControlBar(&m_wndToolBar);
    CRect wrAlredyDockedBar;
    m_wndToolBar.GetWindowRect( &wrAlredyDockedBar );
    wrAlredyDockedBar.OffsetRect( 1, 10);
    DockControlBar(&m_wndDBToolBar,m_wndToolBar.m_pDockBar,&wrAlredyDockedBar);
    记忆位置:LoadBarState(),SaveBarState()
    2.
    RecalcLayout()
     
      

  4.   

    void CMainFrame::DockControlBarLeftOf(CControlBar *Bar, CControlBar *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) ? AFX_IDW_DOCKBAR_BOTTOM : n;
    n = (dw&CBRS_ALIGN_RIGHT) ? AFX_IDW_DOCKBAR_RIGHT : n;
    n = (dw&CBRS_ALIGN_LEFT) ? AFX_IDW_DOCKBAR_LEFT : n; DockControlBar(Bar,n,&rect);
    }