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

问题描述:

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

 

下面是我的解决方法:

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

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

                GetDefaultPaneDivider()->ShowWindow( SW_HIDE);

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


新的问题:

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


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


所以:

最终的解决方案是:

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

      这样做效果会更好一些,但是并非完美的解决方案,因为由于该矩形窗口的背景色与DockablePane的背景色以及控件存在差异,所以会在Pane的边框显示一条边框带。此问题目前还没有想到好的解决方法。



你可能感兴趣的:(关于CDockablePane不能设置固定宽度的解决方案)