MFC DockablePane 不浮动或隐藏

Posted

技术标签:

【中文标题】MFC DockablePane 不浮动或隐藏【英文标题】:MFC DockablePane not floating or hiding 【发布时间】:2009-01-22 13:19:52 【问题描述】:

有什么方法可以使停靠在无法浮动或隐藏的窗口中的 MFC DockablePane(来自新功能包)(甚至禁用允许用户选择状态的上下文菜单 - 可停靠,浮动,隐藏等)

我基本上想要的是在一个窗口上有 3 个窗格,可以改变它们的水平尺寸,但不能改变它们在窗口内的位置。有什么建议吗?

【问题讨论】:

【参考方案1】:

解决方案是扩展 CDockablePane 并在此类中覆盖以下事件:

virtual BOOL CanFloat() const;
virtual BOOL CanBeClosed() const;
virtual BOOL CanAutoHide() const;

所以他们返回 FALSE;

更多信息见MSDN Customization Tips for the MFC Extensions

【讨论】:

感谢您的回答,它也帮助了我。只有一条评论:如果您不想将其他选项卡附加到此选项卡上,也可以覆盖 CanBeAttached():
virtual BOOL CanBeAttached() const return FALSE;
奇怪的事情:如果您的 CanBeClosed() 函数返回 FALSE,此选项卡将不显示 [x](关闭)按钮。但!如果选项卡附加了另一个可以关闭的选项卡,则两个选项卡的 [x] 按钮都将关闭,并且可以关闭两个选项卡。因此,如果您有“混合行为”选项卡,则不应将它们彼此附加。
【参考方案2】:

尝试在创建窗口时更改 dwControlBarStyle(使用 CDockablePane::Create)。

【讨论】:

我找到的唯一值是默认值,即 AFX_DEFAULT_DOCKING_PANE_STYLE ... 还有其他的吗? AFX_DEFAULT_DOCKING_PANE_STYLE 是样式的组合(AFX_CBRS_FLOAT、AFX_CBRS_CLOSE、AFX_CBRS_RESIZE 和 AFX_CBRS_AUTOHIDE)。完整列表在 afxbasepane.h 中。只需将您想要的窗格样式“或”在一起即可。【参考方案3】:

另一种解决方案是,只需调用

CBasePane::SetControlBarStyle(AFX_CBRS_RESIZE|AFX_CBRS_CLOSE);

【讨论】:

您能否添加更多关于如何解决问题或在哪里拨打电话的背景信息? 通过将控制栏样式设置为 AFX_CBRS_RESIZE 和 AFX_CBRS_CLOSE,您将省略 AFX_CBRS_FLOAT 样式,从而有效地删除样式,从而防止窗格浮动。

以上是关于MFC DockablePane 不浮动或隐藏的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试在片段中显示或隐藏浮动操作按钮时出错

css如何实现网页内的浮动窗口的最小化和关闭

使用或不使用 jQuery 在屏幕上获取浮动 div 位置

如何在浮动状态下隐藏 CDockablePane 中的标题栏?

清除浮动(float)的影响

如何在滚动视图中隐藏和取消隐藏 UiViews 中的浮动按钮?