加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

WinCE下透明Label闪烁的问题及解决方案(vb.net)

发布时间:2020-12-16 23:06:04 所属栏目:大数据 来源:网络整理
导读:之前写了一篇WINCE背景图上透明Label显示的解决方法,实际上就是在背景图片上将字体“画”上去,去除掉了标准控件不透明的丑恶面容。 随着项目的进一步开发,发现当背景图片上很多的情况下,改变某一个Label的内容时,其它的Lable跟着闪一下。在尝试各种方法

之前写了一篇WINCE背景图上透明Label显示的解决方法,实际上就是在背景图片上将字体“画”上去,去除掉了标准控件不透明的丑恶面容。

随着项目的进一步开发,发现当背景图片上很多的情况下,改变某一个Label的内容时,其它的Lable跟着闪一下。在尝试各种方法后依然不能解决。在网上查下来的资料大都采用双缓冲的方法,即先在内存画板上将Label画好,然后dump到屏幕上。

具体的方法是在picturebox的Paint事件中:

1,取得picturebox的graphic句柄;

2,准备好新的bitmap,先画背景再一个一个地把Label画上去,

3,利用picturebox的graphic句柄,将第二步的bitmap画到picturebox中

具体代码如下:

我承认: 这样做的好处是效率高,显示速度快。

但是我的项目这样做之后,屏幕闪烁的问题还是没有解决呀 !!

仔细分析下来,终有成果。闪烁的根源在哪呢? 原来当需要改变某一个Label时,WINCE是这样做的:

1,稳定显示各LABEL

2,有需求改变某一LABEL内容时,调用picturebox的refresh函数,这时picturebox是先绘背景

3,当执行到paint事件时,背景已经准备好,然后执行paint事件里用户的画图命令

这样问题就来了,Label在改变时,中间插了一帧干净的背景,如果背景颜色和其它LABEL颜色差别很大的话,闪烁更厉害。

所以解决的思路就是避免插入干净的背景,而是直接将带有Label内容的背景画出来,这样才是解决闪烁问题的关键!

具体的做法是在执行picturebox refresh()之前,创建 带有Label 字的bitmap背景,然后将picturebox的image属性换成这个bitmap背景。

具体做法如下(在上一篇blog<wince下透明Label的实现>基础上):

1,去掉picturebox paint事件,orimap是纯背景

2,增加新函数UpdateShow(),取代PictureBox1.refresh()



OK,这样每次画的背景都带有Label内容,如果Label内容不变,屏幕就不会闪啦。

下面的图是做的小实验,两个图标,一个图标内容不变,另一个图标是数字,每过1mm内容加一。

如果将双缓冲做在paint事件里,那两个图标都闪得不行 。如果将双缓冲做在paint事件之外,废掉paint事件画图 (即上面的做法),这样内容不变的Label一点都不会闪的。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读