这个问题,只要设置标签的背景为透明就可以解决,代码如下:
HBRUSH CTransparentCtlDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
//控件背景透明处理开始 -----------------------------------------
if(nCtlColor== CTLCOLOR_STATIC) //如果是静态标签
{
pDC->SetBkMode(TRANSPARENT);//设置背景模式为透明
return (HBRUSH)GetStockObject(NULL_BRUSH);//返回一个空画刷
}
//控件背景透明处理结束 -----------------------------------------
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
return hbr;
}
但是这样还有一个问题,当我们需要更新标签上面的文字时,会造成重叠在一起,先看一下效果:
SetDlgItemText(IDC_STATIC1,_T("第一次文字"));
SetDlgItemText(IDC_STATIC1,_T("第二次文字"));
解决方法:修改文字后,通知父窗口刷新
void CTransparentCtlDlg::OnBnClickedButton2()
{
// 2次修改标签文字
SetDlgItemText(IDC_STATIC1,_T("第一次文字"));
SetDlgItemText(IDC_STATIC1,_T("第二次文字"));
// 获取标签的矩形位置
CRect rc;
GetDlgItem(IDC_STATIC1)->GetWindowRect(&rc);
//转换为相对坐标
ScreenToClient(&rc);
//刷新指定区域,注意第2个参数为真,即刷新背景
InvalidateRect(&rc,TRUE);
}
最终结果:
源码下载:
http://blog.csdn.net/cometnet/article/details/8706086
如果觉得上面的按钮效果不好,可参考另一个帖子
自绘实现半透明水晶按钮
89 个解决方案
#1
支持下
#2
应该是很多人遇到过的问题~
#3
表示C++不会
#4
#5
#6
,感谢分享
#7
不错,挺详细的,支持一下
#8
楼主好人! 感谢啊!
#9
很不错,但不影响接分
#10
支持一下,呵呵。
#11
感谢分享~~~
#12
非常的不错我很喜欢啊呵呵呵
#13
#14
支持下.! 支持下
#15
感谢分享,支持
#16
[align=center][align=left]
[/align][/align]
#17
支持很好 不错哦
#18
多谢大侠!正要用到!
#19
#20
不错。顶。。。。。
#21
#22
支持一下,这个不错
#23
感谢分享,谢谢额
#24
好的,效果好多了。
#25
好的,效果好多了。
#26
很好 谢谢!!
#27
支持下.! 支持下
#28
很好很好很好很好很好很好很好
#29
好好好好啊啊啊啊
#30
学习了 我也遇到过这样的问题
#31
过来支持一下
#32
#33
#34
#35
派生一个Static
返回空画刷
响应OnEraseBkgnd()画背景
同样OK
返回空画刷
响应OnEraseBkgnd()画背景
同样OK
#36
很好啊,我现在还有个变态需求,有一个按钮,要在按钮上绘制一个bmp,但这个位图是类似于通知栏的弹出提示一样,悬浮在按钮上面,有一半在按钮外面,不知道怎么绘制啊,我想,应该在按钮自己绘制完了之后,通知父窗口去绘制这个位图,不知道有没有什么好的解决方案
#37
#38
#39
dasda实打实
#40
#41
#42
hao1 dingyixia
#43
当初不学VC的原因就是因为很讨厌它的变量命名,那么多的大写字母和缩写,看起来跟汇编一样累!
#44
支持下。努力中
#45
支持一下···
#46
#47
嗯!谢谢分享,学习了。
#48
支持一下 楼主 好东西
#49
#50
#1
支持下
#2
应该是很多人遇到过的问题~
#3
表示C++不会
#4
#5
#6
,感谢分享
#7
不错,挺详细的,支持一下
#8
楼主好人! 感谢啊!
#9
很不错,但不影响接分
#10
支持一下,呵呵。
#11
感谢分享~~~
#12
非常的不错我很喜欢啊呵呵呵
#13
#14
支持下.! 支持下
#15
感谢分享,支持
#16
[align=center][align=left]
[/align][/align]
#17
支持很好 不错哦
#18
多谢大侠!正要用到!
#19
#20
不错。顶。。。。。
#21
#22
支持一下,这个不错
#23
感谢分享,谢谢额
#24
好的,效果好多了。
#25
好的,效果好多了。
#26
很好 谢谢!!
#27
支持下.! 支持下
#28
很好很好很好很好很好很好很好
#29
好好好好啊啊啊啊
#30
学习了 我也遇到过这样的问题
#31
过来支持一下
#32
#33
#34
#35
派生一个Static
返回空画刷
响应OnEraseBkgnd()画背景
同样OK
返回空画刷
响应OnEraseBkgnd()画背景
同样OK
#36
很好啊,我现在还有个变态需求,有一个按钮,要在按钮上绘制一个bmp,但这个位图是类似于通知栏的弹出提示一样,悬浮在按钮上面,有一半在按钮外面,不知道怎么绘制啊,我想,应该在按钮自己绘制完了之后,通知父窗口去绘制这个位图,不知道有没有什么好的解决方案
#37
#38
#39
dasda实打实
#40
#41
#42
hao1 dingyixia
#43
当初不学VC的原因就是因为很讨厌它的变量命名,那么多的大写字母和缩写,看起来跟汇编一样累!
#44
支持下。努力中
#45
支持一下···
#46
#47
嗯!谢谢分享,学习了。
#48
支持一下 楼主 好东西