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

原创 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出了点小问题,暂时不能使用)你们查查看吧.
到最后,实在没有办法,只好放弃使用编辑框,改用静态文本框显示文字,也算是问题没有解决吧


css文字重叠解决

DIV+CSS布局文字较多时候重叠下一行文字内容如何解决? 出现原因是因为对li设置了css高度和宽度,当内容比较多是内容会自动换行,而又有高度,这样就造成内容溢出而与下一排内容重叠覆盖现象。解...
  • zengyonglan
  • zengyonglan
  • 2016年10月12日 15:08
  • 2222

IOS UITableView 图片文字重叠问题

因为涉及到复用问题,所以可以将其cell.contentView.subviews  的  UIView  remove掉。 然后在初始化cell中的UIView时给其:   UIImageView...
  • robinson_911
  • robinson_911
  • 2015年08月17日 20:51
  • 926

解决当静态文本或编辑框等控件设置为透明后文字重叠问题

/*这里解决当静态文本设置为透明后文字重叠问题先隐藏再显示*/ IDC_STATUS 为静态文本控件ID        GetDlgItem(IDC_STATUS)->ShowWindow(SW_...
  • zhangyulin54321
  • zhangyulin54321
  • 2013年04月15日 22:06
  • 2070

对于背景透明,字体不透明的2种写法

1,写一个和它等级为兄弟关系的div,给这个div加css样式: #menu_listbg li{     width:100%;     height:40px;     opacity:0...
  • java_zhaoyanli
  • java_zhaoyanli
  • 2016年09月14日 13:27
  • 808

VC设置静态文本透明显示,动态更新内容,不重叠

静态文本透明显示,和控制显示字体,在上一篇中已经解决,通过CSDN的论坛和网络的力量。 但是在动态更新静态文本内容的时候会出现重叠现象,论坛里也有多处讨论,最后在这里找到了答案 http://we...
  • yanhc519
  • yanhc519
  • 2012年08月27日 22:58
  • 2674

android 背景重叠问题

http://blog.sina.com.cn/s/blog_5da93c8f0100whkb.html 它們的原型如下: void android.widget.ImageView.setIma...
  • heiding215
  • heiding215
  • 2014年01月02日 17:00
  • 571

Microsoft Office PowerPoint 2007 文字重叠

      前段时间安装了Office2007,由于一直没有使用PowerPoint ,今天要写一个演示文稿,在编写过程中,发现有些地方文字会重叠在一起,以为格式不对,反复修改和调整格式都不行,上网找...
  • yjshang
  • yjshang
  • 2010年03月25日 16:40
  • 6761

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

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

CSS实现背景透明/半透明效果 但内容文字不透明

针对透明背景,包括背景图片和背景色 一、背景完全透明  .bg{background:transparent }   二、背景半透明 这里要分两个div,一个单独设置背景透明度,另外一个放内...
  • u011630575
  • u011630575
  • 2015年10月15日 16:58
  • 1340

CDC TextOut如何使字的背景透明

cdc-> SetBkMode(TRANSPARENT); cdc-> TextOut( "... ");
  • dyzhen
  • dyzhen
  • 2010年12月01日 17:39
  • 1837
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于使用了透明文字背景后,文字不能刷新而重叠在一起的问题
举报原因:
原因补充:

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