版权声明:本文为博主原创文章,未经博主允许不可以转载。 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)
认真学习,扎实技术。勿在浮沙筑高台!!!