您的位置:首页 > 其它

关于CDockablePane不能设置固定宽度的解决方案

2014-12-12 16:55 302 查看
问题描述:

工作中用到了CDockablePane类,用它实现一个停靠面板,期望该停靠面板具有停靠、自动隐藏功能,但是不希望它能够改变大小。查阅MSDN和网上资料,发现设置其最小尺寸容易,调用其SetMinSize成员方法可以设置,但是设置最大尺寸、或者让其不能调整尺寸同时保留停靠功能比较麻烦。

下面是我的解决方法:

(1)、从CDockablePane派生自己的类;

(2)、在OnPaint函数中进行如下处理:

GetDefaultPaneDivider()->ShowWindow( SW_HIDE);

该步骤中的得到的窗口为一个宽度为4像素、高度等于Pane的矩形窗口,实现改变大小要靠它,这是我在探究过程中发现的,也不知道该怎么称呼它。将它隐藏掉后就不能实现改变大小了。因为鼠标移动Pane的边缘不再锁定到此窗口。

新的问题:

隐藏掉该窗口后,会留下一个宽度为4像素,高度为Pane高度的矩形区域,在绘图时出现黑块, 原因很简单,隐藏掉窗口该区域没有重绘,解决方法是移动该矩形的位置。

分析得知:其实我期望的不是有没有这个矩形窗口,而是鼠标移动到该矩形窗口上没有响应。

所以:

最终的解决方案是:

将上述步骤(2)中的ShowWindow( SW_HIDE )改为 EnableWindow( FALSE );

这样做效果会更好一些,但是并非完美的解决方案,因为由于该矩形窗口的背景色与DockablePane的背景色以及控件存在差异,所以会在Pane的边框显示一条边框带。此问题目前还没有想到好的解决方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐