获取停靠MFC CDockablePane的停靠区域

时间:2013-05-14 07:29:14

标签: c++ user-interface mfc dock

我正在开发一个完全不想使用内置window/dock状态和MFC位置保存的项目。这意味着在我的主框架中,我设置了EnableLoadDockState(FALSE)。尽管我喜欢将其改回TRUE,但我无法做到。

我计划通过CDockablePane的{​​{1}}获取onAfterDock()停靠的位置。我的问题是我不知道如何将它放在另一个CDockablePane的侧面,顶部或底部。

有没有办法获取这些信息?

谢谢!

2 个答案:

答案 0 :(得分:3)

我认为有一种方法可以实现它,但它并不容易或漂亮。

你正在诱捕OnAfterDock,我猜你对浮动窗格不感兴趣。因此,对于停靠窗格,您可以使用CDockablePane::GetDefaultPaneDividerMSDN here),它返回 - 正如MSDN所说:

  

如果可停靠窗格停靠在主框架窗口上,则为有效CPaneDivider对象;如果停靠窗格未停靠或浮动,则为NULL。

CPaneDivider对象(MSDN here

  

...划分两个窗格,划分两组窗格,或者从主框架窗口的客户区域中分隔一组窗格

以下部分截图说明了更多内容:

cpanedivider

因此,对于常规窗格分隔符,您可以使用CPaneDivider上可用的方法查找其他窗格或其他嵌入式CPaneDivider(这里需要递归询问)并检查分隔符是否为水平或垂直等。

对于上述其他情况,请查看CPaneContainerManager类,(再次as MSDN says

  

...管理当前停靠布局的存储和显示

从此处,您可以再次深入了解从原始停靠窗格开始的整个停靠层次结构。

如果我是你,我真的会再次使用EnableLoadDockState或至少浏览MFC源代码,看看是否有可以重用的内部帮助器类/函数。

答案 1 :(得分:3)

我刚刚解决了这个问题。我可以查看CDockablePane的{​​{1}} dwStyleGetPaneStyle()CBRS_ALIGN_LEFT等。没有复杂的方法。简单。