C++ Buider 6.0 窗口Style对TrackRubberBand函数的影响

版权声明:本文为博主原创文章,未经博主允许不可以转载。 https://blog.csdn.net/aasmfox/article/details/84644847

在再使用TrackRubberBand函数画虚线框的时候 ,使用的是主体Form的hWnd,在VC中的显示与BC中的显示效果不一致,

分析了窗口风格后,原来 Window Styles中的2个属性引起的:

WS_CLIPCHILDREN

0x02000000L

在父窗口中进行绘制时,排除子窗口占用的区域。创建父窗口时使用此样式。

WS_CLIPSIBLINGS

0x04000000L

当特定子窗口收到 WM_PAINT消息时,WS_CLIPSIBLINGS样式会剪切要更新的子窗口区域之外的所有其他重叠子窗口。如果未指定WS_CLIPSIBLINGS并且子窗口重叠,则在子窗口的客户区域内绘制时,可以在相邻子窗口的客户区域内绘制。

 (图1)不使用这个2个属性的交易,虚线框画在Button上面

(图2) 使用了这个风格的窗体,虚线框在按钮button的下面

so,要怎么在Bcb中修改默认的窗口属性,暂时没有看到可以编辑的地,不如VC自由度高,所以要使用重载函数来处理:

重载virutal 函数,取消这2个style
void __fastcall TForm1::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
 Params.Style &=~WS_CLIPCHILDREN;
 Params.Style &=~WS_CLIPSIBLINGS;
}

找到原因,最后就是我要的效果,虚线框不会画在子控件下面了:

(图3)

 

认真学习,扎实技术。勿在浮沙筑高台!!!

猜你喜欢

转载自blog.csdn.net/aasmfox/article/details/84644847