Static控件背景透明时文字覆盖问题的解决方案
2010-10-19 15:14
381 查看
Static控件背景透明时文字覆盖问题的解决方案
(2009-11-06 15:21:24)转载
标签:透明文字覆盖it | 分类: VC |
引子:
我泡论坛的时间并不长,但印象中已经有好多次在VC区看到类似这样的问题,而且经常议之未果:
请问static控件设置透明后,再更改文字时会与之前的文字覆盖,怎么解决
用pDC->SetBkMode(TRANSPARENT);
设置透明后,要改变控件的文字就会发生文字重叠,如果不使用透明就不会,请问在透明状态下改变文字如何不发生重叠?
起初不以为意,闲暇时自己试了一下,发现:文本确实有重叠。如下图(为了更好的说明问题,我特意设置了背景和前景色):
初步探究其原因,猜想应该是static控件的背景没有得到及时刷新。
那就好办了,解决办法:强制刷新。
方法1:GetDlgItem(IDC_STATIC)->UpdateWindow();
无效...
方法2:GetDlgItem(IDC_STATIC)-> RedrawWindow();
无效.......
方法3:GetDlgItem(IDC_STATIC)-> Invalidate ();
无效.........
方法4:还不行?来点小技巧
SetDlgItemText(IDC_STATIC, " ");//多用几个空格,把原先的文本”冲”掉
SetDlgItemText(IDC_STATIC, "TEST");
郁闷了…….
难道这么个小问题要用高级的方法搞?
这个问题困扰了我好几天,终于在一次上WC时突然顿悟:static的背景已经是透明的了,那么残留的文本应该是画在static的父窗口上的。顿悟之后就是感叹:自己真笨啊。
办法有了:在给static 设置新的文本之后(不是之前!)刷新父窗口。
void CTestStaticDlg::OnTimer(UINT nIDEvent)
{
CString strTime;
CTime time = CTime::GetCurrentTime();
strTime = time.Format("%y年%m月%d日 %H:%M:%S");
GetDlgItem(IDC_STATIC)->SetWindowText(strTime);
GetDlgItem(IDC_STATIC)->GetParent()->RedrawWindow(); //就这两句话而已,呵呵
CDialog::OnTimer(nIDEvent);
}
编译运行,K.O.
相关文章推荐
- 关于Static控件背景透明时文本覆盖重影的问题
- MFC 关于Static控件背景透明时文本覆盖重影的问题
- 关于Static控件背景透明时文本覆盖重影的问题
- VC++ CStatic控件背景透明且改变其文本时,文字重叠解决方法
- 如何让STATIC控件背景透明,只显示文字。其它控件也应该可以适用。
- MFC解决Static控件背景透明时文本覆盖重影
- MFC解决Static控件背景透明时文本覆盖重影
- MFC解决Static控件背景透明时文本覆盖重影
- 如何使STATIC控件的背景透明以及动态改变控件文本内容时闪烁的问题
- 如何使STATIC控件的背景透明以及动态改变控件文本内容时闪烁的问题
- 双缓存解决闪烁及对话框背景覆盖控件问题
- 双缓存解决闪烁及对话框背景覆盖控件问题
- [wxWidgets]_[中级]_[自定义wxStaticText控件支持图片背景(透明背景)]
- 关于使用了透明文字背景后,文字不能刷新而重叠在一起的问题
- MFC设置Static控件背景透明
- MFC Static控件背景透明时文本覆盖重影
- [wxWidgets]_[中级]_[自定义wxStaticText控件支持图片背景(透明背景)]
- C# 解决panel或者其他控件叠加时,此控件背景透明,显示的背景色为窗体背景色问题
- 背景透明后字体,贴图产生遮盖覆盖问题的解决方法。
- UIKit和Cocos2d-x的整合使用;设置CCEAGLView背景为透明,来显示背后的UIView; 以及整合中遇到的问题的解决方案