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