关于使用了透明文字背景后,文字不能刷新而重叠在一起的问题

原创 2007年09月23日 13:28:00
 

HTML Tags and JavaScript tutorial



关于使用了透明文字背景后,文字不能刷新而重叠在一起的问题





 前两天做界面,因为在对话框上贴了一幅图,为了使编辑框,文本框中的文字看起来与对话框浑然一体,我重载了
WM_CTLCOLOR,并添加代码使编辑框,文本框的背景透明,代码如下:
HBRUSH CTestOutputDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 CBrush *brush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
 // TODO: Change any attributes of the DC here
 if(nCtlColor==CTLCOLOR_DLG)
 {
  pDC->SetTextColor(RGB(0,0,0));
  pDC->SetBkColor(RGB(100,200,200));
 }
 if(pWnd->GetDlgCtrlID()==IDC_T)
 {
  pDC->SetTextColor(RGB(255,100,100));
  pDC->SetBkMode(TRANSPARENT);
  return *brush;
 }
 else if(nCtlColor==CTLCOLOR_STATIC)
 {
  if(pWnd->GetDlgCtrlID()!=IDC_PICSLIDER)
  {
   pDC->SetTextColor(RGB(255,255,200));
   pDC->SetBkMode(TRANSPARENT);
   return *brush;
  }
 }
 
 return hbr; 
}
后来又在对话框上加上一个计时器,显示日期和时间,发现数字总是会重叠在一起,到最后变成黑疙瘩.
试了很多方法,后来使用Invalidate,问题算是解决了,但会出现画面闪烁的问题,看的眼睛疼.
分析原因:
最一般情况下,编辑框,文本框之类的控件要刷新主要办法是用画刷覆盖原来的区域,如果是有颜色的画刷把原来的文字覆盖,人们会以为文字被删除了,这就是为什么很多人告诉我他们的计数器没有问题的原因.就比如在一张白纸上盖上另一张白纸,先前的字会看不见,如果在写着字的透明玻璃上再盖一个透明玻璃,那会是什么效果,如果在新玻璃的同一位置写上不同的文字那又会是什么效果.
还好,刷新屏幕也是个办法,但能不能只让一个屏幕的一块区域刷新,这样即使闪烁,也不会那么明显.
使用以下代码
 CRect rect;
 GetDlgItem(IDC_TIME)->GetWindowRect(rect);
 ScreenToClient(rect);
 InvalidateRect(rect);
现在只剩编辑框能刷新了,问题解决.
接下来又遇见一个新问题,我的一个编辑框用来接收数字,按钮按下后会在编辑框有所显示,当我按下按钮使,我发现,先前的计时器模糊了一下然后又恢复,这也算是个问题吧,让用户发觉总不太好.
后来想想,应该是Updatedata(FALSE)的问题,以前总认为Updatedata只会影响一个小区域,现在才知道,它影响的是整个对话框,所以当我按下按钮并调用Updatedata(FALSE)使编辑框显示时,会影响到计时器的文本框,让它提前显示,现在使用代码刷新一小块区域只能解决文字重叠的问题,还没找到UpdatedataRect这样的函数,(刚想到要去查,MSDN出了点小问题,暂时不能使用)你们查查看吧.
到最后,实在没有办法,只好放弃使用编辑框,改用静态文本框显示文字,也算是问题没有解决吧


标签背景透明以及文字重叠问题

当我们在窗口使用了非系统默认颜色或图片当背景时,上面的标签等控件实在是影响美观 这个问题,只要设置标签的背景为透明就可以解决,代码如下: HBRUSH CTransparentCtlDlg::...

CStatic控件背景透明且改变其文本时,文字重叠解决方法

问题 提出: 最近在项目中将CStatic控件设置为背景透明且在一个定时器函数改变其文本,结果CStatic的文字重叠了。解决该问题的方案是:从CStatic类派生自己的静态文本控件。 其...

VS2010解决对话框设置背景图片和文字重叠问题

内容:MFC基于对话框的项目设置背景图片以及解决设置对话框背景之后导致文字重叠(叠影)问题。 简介: 被严密封装的MFC应用程序界面开发是一个很大的问题。先从简单的对话框背景设置来说。 可以设置...
  • maturn
  • maturn
  • 2012年10月09日 15:10
  • 6093

VS2010解决对话框设置背景图片和文字重叠问题

内容:MFC基于对话框的项目设置背景图片以及解决设置对话框背景之后导致文字重叠(叠影)问题。 简介: 被严密封装的MFC应用程序界面开发是一个很大的问题。先从简单的对话框背景设置来说。 可以...

CStatic子类化解决背景透明,文本重叠,刷新闪烁问题

由于是很少使用VS2008的MFC,遇到了很多麻烦,其实都是很初级的;但是我还是想做点记录,以示对自己工作的鼓励,同时也是留个纪念,因为随着微软政策的变化,以后MFC的程序将不会是趋势了,而我也有意从...
  • tom06
  • tom06
  • 2014年08月12日 19:16
  • 2630

Android使用xml定义带背景Button(解决ImageButton不能加文字的问题)

虽然Android给我们提供了ImageButton 这一组件来实现带有自定义图片背景的Button,但是ImageButton有一个缺陷就是不能添加文字而如下的方法则可以综合二者的优势. ...

选项卡滑动弹出文字透明背景

  • 2015年07月26日 15:45
  • 187KB
  • 下载

怎样去掉桌面图标阴影(文字背景透明)

如果有一天你的桌面图标 由这样 变成了这样   可以尝试采用如下方法恢复 (适用于winXP、win2003,vista未测试) 1、桌面--右击--属性-外观-效果-在菜单下显示阴影" ...
  • wqjsir
  • wqjsir
  • 2011年10月22日 01:00
  • 1154
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于使用了透明文字背景后,文字不能刷新而重叠在一起的问题
举报原因:
原因补充:

(最多只允许输入30个字)