static控件动态透明显示的完美解决方案
2014-04-27 19:06
204 查看
在有背景图片的对话框中,static控件的透明显示是一个非常普通的问题。
常用的解决办法可以通过重载OnCtlColor函数设置背景透明,再返回一个空画刷来解决。
[cpp] view plaincopy
01.if(nCtlColor == CTLCOLOR_STATIC )
02.{
03. pDC->SetBkMode(TRANSPARENT);//设置背景透明
04. pDC->SetTextColor(RGB(255,255,0));//设置字体为黄色
05. return (HBRUSH)::GetStockObject(NULL_BRUSH);
06.}
但这种方法有一个弊端:不能动态更新static控件内容,否则输出的文字会重叠。
对于动态更新问题的解决办法就是将控件背后的对话框图片贴到控件上来,这样就可以实现static控件的动态更新了。
下面将详叙通过CTransparentStatic类来实现static控件动态的透明显示的解决方案,其中在CTransparentStatic类的OnPaint函数中实现了动态更新控件背景图片(即将将控件背后的对话框图片贴到控件上来)。lfbjz.codeplex.com
1、在头文件中为static控件增加一个变量(ID为IDC_STATIC_ELAPSETIME ),并使此变量类型为CTransparentStatic,而不是默认的CStatic
[cpp] view plaincopy
01.CTransparentStatic m_staEelapseTime;
2、在对话框的OnInitDialog函数中设置此控件的字体大小和颜色
[cpp] view plaincopy
01.m_staEelapseTime.SetFont(&m_font1);
02.m_staEelapseTime.SetTextColor(RGB(255,255,0)); //黄色
3、在OnCtlColor函数中设置此控件透明和颜色,并返回一个空画刷。
[cpp] view plaincopy
01.if( pWnd ->GetDlgCtrlID() == IDC_STATIC_ELAPSETIME )
02. {
03. pDC->SetBkMode(TRANSPARENT);//设置背景透明
04. pDC->SetTextColor(RGB(255,255,0));//设置字体为黄色
05. return (HBRUSH)::GetStockObject(NULL_BRUSH);
06.
07. }
注意,第三步必须有,否则动态显示staEelapseTime控件内容时,会先绘制windows默认的static控件,造成控件闪烁,自己试一下就知道了。
常用的解决办法可以通过重载OnCtlColor函数设置背景透明,再返回一个空画刷来解决。
[cpp] view plaincopy
01.if(nCtlColor == CTLCOLOR_STATIC )
02.{
03. pDC->SetBkMode(TRANSPARENT);//设置背景透明
04. pDC->SetTextColor(RGB(255,255,0));//设置字体为黄色
05. return (HBRUSH)::GetStockObject(NULL_BRUSH);
06.}
但这种方法有一个弊端:不能动态更新static控件内容,否则输出的文字会重叠。
对于动态更新问题的解决办法就是将控件背后的对话框图片贴到控件上来,这样就可以实现static控件的动态更新了。
下面将详叙通过CTransparentStatic类来实现static控件动态的透明显示的解决方案,其中在CTransparentStatic类的OnPaint函数中实现了动态更新控件背景图片(即将将控件背后的对话框图片贴到控件上来)。lfbjz.codeplex.com
1、在头文件中为static控件增加一个变量(ID为IDC_STATIC_ELAPSETIME ),并使此变量类型为CTransparentStatic,而不是默认的CStatic
[cpp] view plaincopy
01.CTransparentStatic m_staEelapseTime;
2、在对话框的OnInitDialog函数中设置此控件的字体大小和颜色
[cpp] view plaincopy
01.m_staEelapseTime.SetFont(&m_font1);
02.m_staEelapseTime.SetTextColor(RGB(255,255,0)); //黄色
3、在OnCtlColor函数中设置此控件透明和颜色,并返回一个空画刷。
[cpp] view plaincopy
01.if( pWnd ->GetDlgCtrlID() == IDC_STATIC_ELAPSETIME )
02. {
03. pDC->SetBkMode(TRANSPARENT);//设置背景透明
04. pDC->SetTextColor(RGB(255,255,0));//设置字体为黄色
05. return (HBRUSH)::GetStockObject(NULL_BRUSH);
06.
07. }
注意,第三步必须有,否则动态显示staEelapseTime控件内容时,会先绘制windows默认的static控件,造成控件闪烁,自己试一下就知道了。
相关文章推荐
- static控件动态透明显示的完美解决方案
- static控件动态透明显示的完美解决方案
- 半透明界面(逐像素透明,不规则外观,支持任意控件)的完美解决方案
- 如何使STATIC控件的背景透明以及动态改变控件文本内容时闪烁的问题
- 如何使STATIC控件的背景透明以及动态改变控件文本内容时闪烁的问题
- 半透明界面(逐像素透明,不规则外观,支持任意控件)的完美解决方案
- Static控件背景透明时文字覆盖问题的解决方案
- 如何让STATIC控件背景透明,只显示文字。其它控件也应该可以适用。
- Ext.Net中CheckboxSelectionModel的动态隐藏(显示),一定条件下的隐藏(不让选择),获得多选栏位的信息,及后台控件的动态创建
- duilib 修复CTreeViewUI控件动态添加子控件时,对是否显示判断不足的bug
- [转载内容]动态创建菜单,menustrip,根据权限显示菜单,控制菜单可用,反射,给窗体传值,反射对象传值,public static Object CreateInstance ( Type type, params Object[] args )
- 在Static控件上显示图片
- wxWidgets动态显示控件的注意点
- android在滑动控件过程中动态设置view背景透明的问题
- DropDownList 控件控制Image控件动态显示图像
- MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片
- VC中picture控件动态换背景及控件被picture盖住解决方案
- VC窗体透明而控件不透明以及Static文本背景透明方法
- android 6.0, 7.0之动态申请权限完美解决方案
- RDLC报表隔行不同背景颜色显示的完美解决方案