基于父窗口底图的透明控件设计

最近研究控件设计,其中一个要求是建立透明的cstatic控件,一般方法使用:步骤(1)OnCtlColor中设置透明背景,会带来文字重叠;所以步骤(2)刷新文字时进行InvalidateRect强制重绘文字区域,会带来闪烁;所以步骤(3)使用双缓冲等方式减弱闪烁。

试过网上找到的多种方法,均不能有效的消除闪烁。虽然不影响整体使用,但是看着不舒服,所以就想到了另外一种方法:用父窗口的底图截图来作为控件的背景,就可以使控件本身在父窗口上“透明”,是一种假的隐身。

前提:1.父窗口是加载了背景底图的;2.控件在父窗口中。

步骤(1)创建一个父窗口,OnPaint()中加载底图,函数BitBlt;

步骤(2)创建一个CStatic的派生类,设置自绘模式;Create中传递父窗口的底图信息;DrawItem中进行重绘底图设置、其他重绘,函数BitBlt,注意函数中的位置信息应该是控件的x、y和width、height。

示例 :红色文字为自定义控件,可是实现透明无重叠无闪烁。如图1 所示。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值