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

邓学彬 2013-03-22 02:32:18
加精
当我们在窗口使用了非系统默认颜色或图片当背景时,上面的标签等控件实在是影响美观


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

如果觉得上面的按钮效果不好,可参考另一个帖子
自绘实现半透明水晶按钮
...全文
12749 89 打赏 收藏 转发到动态 举报
写回复
用AI写文章
89 条回复
切换为时间正序
请发表友善的回复…
发表回复
zw787926943 2015-10-23
  • 打赏
  • 举报
回复
函数应该放在哪里呀,为什么我的编译成功没效果
fan_bin 2015-01-09
  • 打赏
  • 举报
回复
好东西,支持!!
lizi_cug 2014-11-13
  • 打赏
  • 举报
回复
引用 35 楼 smilenot 的回复:
派生一个Static 返回空画刷 响应OnEraseBkgnd()画背景 同样OK
求问怎么实现 另外,LZ的方法只适用控件少的情况,我有十几个编辑框控件,一次数据更新用updatedata,一个一个处理明显就啰嗦冗长了。
昭告天下 2014-04-28
  • 打赏
  • 举报
回复
好文。顶一个
shuzhongxunyu 2014-04-18
  • 打赏
  • 举报
回复
好好学习下,谢谢楼主
清茶酒 2014-03-27
  • 打赏
  • 举报
回复
lggrief 2013-12-12
  • 打赏
  • 举报
回复
不错,先收藏了以后用到的时候拿出来看看
小熊怪 2013-12-09
  • 打赏
  • 举报
回复
大神膜拜!!!
qingye2008 2013-05-02
  • 打赏
  • 举报
回复
支持,写的很好.
qq823869568 2013-04-29
  • 打赏
  • 举报
回复
好的,效果好多了。
luckydone 2013-04-07
  • 打赏
  • 举报
回复
实用小技巧,谢谢分享
u010132738 2013-04-02
  • 打赏
  • 举报
回复
Charlie1314 2013-04-01
  • 打赏
  • 举报
回复
顶点小说http://www.9423xs.com have a look
u010107099 2013-03-31
  • 打赏
  • 举报
回复
同问这个。楼主加油
前行奔跑 2013-03-31
  • 打赏
  • 举报
回复
恩 这个问题我也遇到过。
u010107867 2013-03-31
  • 打赏
  • 举报
回复
shuang_yi 2013-03-30
  • 打赏
  • 举报
回复
楼主好人! 感谢啊!
OtakuCode 2013-03-30
  • 打赏
  • 举报
回复
引用 60 楼 ITxiaonan 的回复:
把经验分享给新手 值得赞一个
sntevke220 2013-03-29
  • 打赏
  • 举报
回复
旅行者的青色 2013-03-28
  • 打赏
  • 举报
回复
看着好像很复杂的样子。。
加载更多回复(54)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧