关于CStatic显示的问题,路过的大牛进来指点下

是这样的,想要获取系统的时间,并且放到一个静态文本上来进行显示。工程是基于对话框的,为了美观,进了了贴图美化。

在OnTimer中间隔1s读取一次系统时间并显示。

因为贴了背景,所以静态文本不透明的话,很难看。所以按照常规的方法在OnCtlColor中简单的设置了这个文本为透明。
开始只设置透明后,静态文本的显示会产生重叠。黑乎乎一片。搜索了下,是因为没有刷新造成的,因此,在每一次文字改变后都对静态文本的区域进行了刷新。但是偶尔还是会有闪烁的现象。

网上能搜到的方法都试了下,不理想。
最后看到一个CxStatic的Demo,感觉不错,不过他是直接给静态文本添加了一个位图,然后在上面显示,无任何闪烁。

因此,我想要 先获取静态文本空间的背景,然后再把这个背景付给静态文本,这样的就应该好了把,
但是该如何获取静态文本空间区域内的背景,并把它转换成bmp?

或者哪位大牛还有好的解决方法么?指点下,我入门不久,很菜

作者: dwlovehome   发布时间: 2011-06-15

在设置CStatic的文本之前,先强制刷新一下该区域即可,InvalidateRect

作者: VisualEleven   发布时间: 2011-06-15

CStatic设置成透明后,每次设置都需要强制刷新CStatic所在区域的窗口,否则肯定会出现重叠的

作者: shenyi0106   发布时间: 2011-06-15

引用 1 楼 visualeleven 的回复:
在设置CStatic的文本之前,先强制刷新一下该区域即可,InvalidateRect


现在强制刷新这个区域就会有闪烁的。我现在想把这个空间区域内的DC,然后把这个DC当作静态文本的背景画出,可以么?这样的话要怎么做

作者: dwlovehome   发布时间: 2011-06-15

引用 2 楼 shenyi0106 的回复:
CStatic设置成透明后,每次设置都需要强制刷新CStatic所在区域的窗口,否则肯定会出现重叠的

现在重叠已经消除,关键是或有轻微闪烁的问题。
我想要获取控件所在区域的背景,然后在在DrawItem里面画出,这样的话要怎么做的哈

作者: dwlovehome   发布时间: 2011-06-15

引用 4 楼 dwlovehome 的回复:
引用 2 楼 shenyi0106 的回复:
CStatic设置成透明后,每次设置都需要强制刷新CStatic所在区域的窗口,否则肯定会出现重叠的

现在重叠已经消除,关键是或有轻微闪烁的问题。
我想要获取控件所在区域的背景,然后在在DrawItem里面画出,这样的话要怎么做的哈

这样做和刷新没区别啊,要闪烁也还会闪烁的
貌似定时器这种刷新,有轻微闪烁,不严重,应该可以接受的啊

作者: shenyi0106   发布时间: 2011-06-15


这样做和刷新没区别啊,要闪烁也还会闪烁的
貌似定时器这……
[/Quote]

网上下载了一个cxstatic的demo,他是给static给了一个BMP的图片。然后在它的这个类DrawItem里面,绘制背景并且绘制了文字。没有任何的闪烁。
所以我现在就想着把静态文本CStatic空间区域的背景取出来。在生成一个类,在这个类的DrawItem里面绘制父对话框的背景(为了达到视觉的透明),然后在画出要跟新的文字

作者: dwlovehome   发布时间: 2011-06-15

引用 6 楼 dwlovehome 的回复:
这样做和刷新没区别啊,要闪烁也还会闪烁的
貌似定时器这……


网上下载了一个cxstatic的demo,他是给static给了一个BMP的图片。然后在它的这个类DrawItem里面,绘制背景并且绘制了文字。没有任何的闪烁。
所以我现在就想着把静态文本CStatic空间区域的背景取出来。在生成一个类,在这个类的DrawItem里面绘制父对话框的背景(为了达到视觉的透明),……
[/Quote]
之前和今天都有遇到文本闪烁问题,我的是先在窗体上贴个背景图,再画上去个文本字串,用个定时器来改变文本和刷新区域,没有问题,但是如果resize窗体的话就有轻微闪烁(已经双缓冲了,)闪烁不能接受,没能解决。
用Static控件显示文本的没试。
楼主是想取static控件下的部分背景图,在扔给Static控件绘制背景?
static控件自绘的时候根据其在背景图上的位置,用BltBit这样的函数不行了么?
不过这样能解决轻微闪烁吗?

作者: pop1210   发布时间: 2011-06-15