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

博客讲述了在使用TrackRubberBand函数画虚线框时,由于Windows风格WS_CLIPCHILDREN和WS_CLIPSIBLINGS的影响,导致在BCB和VC中显示效果不一致。通过分析窗口风格,发现这两个属性是问题所在。为了解决这个问题,作者在BCB中重载了CreateParams函数,清除这俩风格,实现了虚线框正确显示。博客强调了深入理解和扎实技术的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在再使用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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿峰的编程博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值