我正在开发一个完全不想使用内置window/dock
状态和MFC
位置保存的项目。这意味着在我的主框架中,我设置了EnableLoadDockState(FALSE)
。尽管我喜欢将其改回TRUE,但我无法做到。
我计划通过CDockablePane
的{{1}}获取onAfterDock()
停靠的位置。我的问题是我不知道如何将它放在另一个CDockablePane
的侧面,顶部或底部。
有没有办法获取这些信息?
谢谢!
答案 0 :(得分:3)
我认为有一种方法可以实现它,但它并不容易或漂亮。
你正在诱捕OnAfterDock
,我猜你对浮动窗格不感兴趣。因此,对于停靠窗格,您可以使用CDockablePane::GetDefaultPaneDivider
(MSDN here),它返回 - 正如MSDN所说:
如果可停靠窗格停靠在主框架窗口上,则为有效
CPaneDivider
对象;如果停靠窗格未停靠或浮动,则为NULL。
CPaneDivider
对象(MSDN here)
...划分两个窗格,划分两组窗格,或者从主框架窗口的客户区域中分隔一组窗格
以下部分截图说明了更多内容:
因此,对于常规窗格分隔符,您可以使用CPaneDivider
上可用的方法查找其他窗格或其他嵌入式CPaneDivider
(这里需要递归询问)并检查分隔符是否为水平或垂直等。
对于上述其他情况,请查看CPaneContainerManager
类,(再次as MSDN says)
...管理当前停靠布局的存储和显示
从此处,您可以再次深入了解从原始停靠窗格开始的整个停靠层次结构。
如果我是你,我真的会再次使用EnableLoadDockState
或至少浏览MFC源代码,看看是否有可以重用的内部帮助器类/函数。
答案 1 :(得分:3)
我刚刚解决了这个问题。我可以查看CDockablePane
的{{1}} dwStyle
)GetPaneStyle()
,CBRS_ALIGN_LEFT
等。没有复杂的方法。简单。