BCG可以自动保存dockingcontrolbar的属性(位置,大小,可见,停靠等),不过必须把dockingcontrolbar放在Mainframe里面。
如果dockingcontrolbar在childframe里面(类似MDIBars那个sample),就没法保存了。但是看了一下CBCGPMDIChildWnd类好像有SaveCunstomState或者类似的方法。
哪位大虾有过类似的开发经验,请指教一下。多谢

解决方案 »

  1.   

    很久以前做过,不过现在没有代码。只要它提供了SaveCustomState方法,你在合适的窗口消息里面去调用就是了,当然要记得窗口再打开时要调用LoadCustomState来恢复状态。
      

  2.   

    感谢各位回复。
    我知道肯定说通过重载某个函数来实现,但是重载函数中这个操作是不是很复杂,我看了CBCGPFrameWnd的类似函数,都是一层套一层。还有这个state的结构是什么样的?如果哪位有些代码能做参考最好。谢谢啦。
      

  3.   

    谢谢,还有一个问题就是,读出这些值以后,我需要自己操作controlbar(比如用代码设置其大小和位置)还是只要用LoadState就可以了。
      

  4.   

    如果它是自动Load的就能自动恢复窗口属性,如果是你自己来load的,需要你自己用代码来设置窗口属性
      

  5.   

    好像又发现一个问题,CBCGPMDIChildWnd没有这个Save和Load的函数,似乎全需要自己写。
    这可就太麻烦了。
      

  6.   

    但是那就需要判断停靠位置和得到当前大小和状态
    看了一下SetBarSize的example,手动设置大小和位置非常的不方便,所以我就想用CBCGPMDIFrameWnd中写好的代码来实现,但是我发现这些Save和Load好像也不是放在CBCGPMDIFrameWnd类中的,似乎从CBCGPWorkSpace中调用的,现在就是不太清楚者之间的关系,以及怎么条用这些函数。
      

  7.   

    从BCG的Support那里知道解决办法了,
    在OnClose或者OnDestroy里用
    CString str = _T ("Software\\XXX\\XXX\\Settings\\ChildFrm\\");
    GetDockManager()->SaveState(str);
    重写一下LoadFrame里用
    GetDockManager()->LoadState(_T("Software\\XXX\\XXX\\Settings\\ChildFrm\\"));
    GetDockManager()->SetDockState();就可以了