关于使用了透明文字背景后,文字不能刷新而重叠在一起的问题
来源:互联网 发布:网络电视 广电总局 编辑:程序博客网 时间:2024/04/29 22:44
前两天做界面,因为在对话框上贴了一幅图,为了使编辑框,文本框中的文字看起来与对话框浑然一体,我重载了
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出了点小问题,暂时不能使用)你们查查看吧.
到最后,实在没有办法,只好放弃使用编辑框,改用静态文本框显示文字,也算是问题没有解决吧
- 关于使用了透明文字背景后,文字不能刷新而重叠在一起的问题
- 关于使用了透明文字背景后,文字不能刷新而重叠在一起的问题
- -- tableView的cell背景设置为透明时,文字会重叠在一起 -
- 标签背景透明以及文字重叠问题
- CSS实现背景透明而背景上的文字不透明
- cell的文字会重叠在一起
- 标签背景透明以及文字重叠问题解决方法
- 关于背景透明,文字不透明的最佳方法,兼容IE
- 关于设置背景块透明,上面的文字不透明
- 解决当静态文本或编辑框等控件设置为透明后文字重叠问题
- 背景透明,文字不透明
- 背景透明文字不透明
- 背景透明文字不透明
- 背景透明文字不透明
- 背景透明,文字不透明
- css3 RGBA颜色实现背景颜色透明而文字不透明
- 想让您的桌面文字背景透明吗?
- 想让您的桌面文字背景透明吗?
- 《WEB性能测试实战》的作者(就是俺啦)将在第一届IT技术与管理图书文化节上与读者当面交流。
- 回复:西安的大学生,I 服了 You!
- java处理大文本及复杂文本替换方法
- 这世界公平吗?
- 如何识别 SQL Server 的版本
- 关于使用了透明文字背景后,文字不能刷新而重叠在一起的问题
- 百度裁员门:裁员过程录音曝光
- 摩托罗拉铃声下载
- Java进阶学习:jar打包详解
- 改变人生的五句话
- JAR 文件揭密
- Zeta Debugger 1.2:
- 今日收藏(7.14)
- MY NEW TECHNOLOGY BLOG