标签背景透明以及文字重叠问题解决方法_源码分享

时间:2021-03-12 00:23:01
当我们在窗口使用了非系统默认颜色或图片当背景时,上面的标签等控件实在是影响美观
标签背景透明以及文字重叠问题解决方法_源码分享

这个问题,只要设置标签的背景为透明就可以解决,代码如下:
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


该回复于2013-03-22 17:00:35被管理员删除

#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


该回复于2013-03-23 09:46:59被管理员删除

#33


该回复于2013-03-23 10:01:48被管理员删除

#34


标签背景透明以及文字重叠问题解决方法_源码分享

#35


派生一个Static
返回空画刷
响应OnEraseBkgnd()画背景
同样OK

#36


很好啊,我现在还有个变态需求,有一个按钮,要在按钮上绘制一个bmp,但这个位图是类似于通知栏的弹出提示一样,悬浮在按钮上面,有一半在按钮外面,不知道怎么绘制啊,我想,应该在按钮自己绘制完了之后,通知父窗口去绘制这个位图,不知道有没有什么好的解决方案

#37


标签背景透明以及文字重叠问题解决方法_源码分享

#38


该回复于2013-03-23 13:56:17被管理员删除

#39


dasda实打实

#40


该回复于2013-03-24 09:50:41被管理员删除

#41


该回复于2013-03-23 14:37:57被管理员删除

#42


hao1   dingyixia

#43


当初不学VC的原因就是因为很讨厌它的变量命名,那么多的大写字母和缩写,看起来跟汇编一样累!

#44


支持下。努力中

#45


支持一下···

#46


该回复于2013-03-24 09:38:57被管理员删除

#47


嗯!谢谢分享,学习了。

#48


支持一下 楼主 好东西

#49


标签背景透明以及文字重叠问题解决方法_源码分享

#50


标签背景透明以及文字重叠问题解决方法_源码分享

#1


标签背景透明以及文字重叠问题解决方法_源码分享支持下

#2


应该是很多人遇到过的问题~

#3


表示C++不会

#4


标签背景透明以及文字重叠问题解决方法_源码分享

#5


标签背景透明以及文字重叠问题解决方法_源码分享

#6


标签背景透明以及文字重叠问题解决方法_源码分享,感谢分享

#7


不错,挺详细的,支持一下

#8


楼主好人! 感谢啊!

#9


很不错,但不影响接分

#10


标签背景透明以及文字重叠问题解决方法_源码分享支持一下,呵呵。

#11


感谢分享~~~

#12


非常的不错我很喜欢啊呵呵呵 

#13


该回复于2013-03-22 17:00:35被管理员删除

#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


该回复于2013-03-23 09:46:59被管理员删除

#33


该回复于2013-03-23 10:01:48被管理员删除

#34


标签背景透明以及文字重叠问题解决方法_源码分享

#35


派生一个Static
返回空画刷
响应OnEraseBkgnd()画背景
同样OK

#36


很好啊,我现在还有个变态需求,有一个按钮,要在按钮上绘制一个bmp,但这个位图是类似于通知栏的弹出提示一样,悬浮在按钮上面,有一半在按钮外面,不知道怎么绘制啊,我想,应该在按钮自己绘制完了之后,通知父窗口去绘制这个位图,不知道有没有什么好的解决方案

#37


标签背景透明以及文字重叠问题解决方法_源码分享

#38


该回复于2013-03-23 13:56:17被管理员删除

#39


dasda实打实

#40


该回复于2013-03-24 09:50:41被管理员删除

#41


该回复于2013-03-23 14:37:57被管理员删除

#42


hao1   dingyixia

#43


当初不学VC的原因就是因为很讨厌它的变量命名,那么多的大写字母和缩写,看起来跟汇编一样累!

#44


支持下。努力中

#45


支持一下···

#46


该回复于2013-03-24 09:38:57被管理员删除

#47


嗯!谢谢分享,学习了。

#48


支持一下 楼主 好东西

#49


标签背景透明以及文字重叠问题解决方法_源码分享

#50


标签背景透明以及文字重叠问题解决方法_源码分享