| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1991 人关注过本帖, 1 人收藏
标题:vb6绘制活动图案-虚拟仪表的指针,每次都要更新背景,太占用系统资源了,又 ...
只看楼主 加入收藏
wangjinchao
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-4-13
收藏
得分:0 
回复 5楼 lowxiong
紧急求助!怎么做。或者怎样用line画一个透明指针。
2010-10-14 13:58
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
回复 21楼 wangjinchao
仪表.rar (35.92 KB)


我的测试工程,你看看.

指针是最简单的.

授人于鱼,不如授人于渔
早已停用QQ了
2010-10-14 17:31
wangjinchao
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-4-13
收藏
得分:0 
回复 22楼 风吹过b
的确屏幕不再闪,很神奇。cpu的使用率高达100%,可能画线方式太耗cpu时间了。
我试图将指针图片放下层,表盘放上层,仅作了重复绘制表针,屏幕照样闪的严重。
2010-10-14 19:02
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
那个极限摆表是死循环在刷新,下面有 FPS 显示.极限摆表是用来测试 系统运行情况的.
这个自然是 CPU使用率占用 100%啊.

你使用的过程中应该是使用定时器或什么程序进行周期性激发.
按钮1就是摆表一次的,你应该可以看到CPU占用率的.瞬间完成的.



授人于鱼,不如授人于渔
早已停用QQ了
2010-10-15 08:05
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
右有二个图像框和一个 image1 控件.
image1 保存背景图.
Picture1 用来绘制 仪表格子线的.也就是 先复制背景,再画格子线,然后保存的.
Picture3 用来绘制 指针的 .先从 Picture1 复制图像 后,再画指针 .

绘制完 Picture3 后,再把指定坐标把 Picture3 的内容贴到左边 Picture2 中的指定位置去.
这里面按原图大小,不缩放进行贴的.
这里面我还简化了一个动作,就是简化掉了缓冲区.

实际使用应该是 Picture2 是一个缓冲区,在 Picture2 全部贴完后,再把整个图像一次性贴到需要显示的地方去.
 C 里面就是这样的处理的,把视口分为二个,一个可见,另一个不可见,先在 不可见的上面绘图,然后翻转,让可见的变为不可见,不可见的变为可见,使图像变的平滑不闪烁.


授人于鱼,不如授人于渔
早已停用QQ了
2010-10-15 08:15
wangjinchao
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-4-13
收藏
得分:0 
回复 25楼 风吹过b
我马上作了实验,如果仪表放在picture控件里是不闪的,原来我的做法是,在 form里放上几个image图片,定时更新图片或者划线,结果出现闪的情况,二者都是先设置autoredraw=false,然后cls.它们区别在那呢?
2010-10-15 08:30
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
Picture ,你要画新的线之前,就必须 CLS ,再贴新的背景,再画线.结果就是闪一下.不管什么机子都会闪.

而我是 把新的线画在 另一个不显示的 Picture 中,如果出现闪的话也是在这个不显示出来的 Picture 中闪烁,看不到,所以不用管.
然后再整个复制过来,在显示的 Picture 中,不需要CLS ,只需要做一件事, 贴图过来,自然不闪.

授人于鱼,不如授人于渔
早已停用QQ了
2010-10-15 11:52
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
设置 autoredraw=false 后,图像不会由 windows 自动更新,必须要手动更新.
还在设置 autoredraw=false 后 Picture 控件的 image 属性无效,得到的结果是空白.
image 属性的内容是 你在 Picture 中贴图,画线 等等操作后,最终的图像.
所以,设置 autoredraw=true 后,picture 就可以当作图像的缓冲区来使用.

授人于鱼,不如授人于渔
早已停用QQ了
2010-10-15 11:55
wangjinchao
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-4-13
收藏
得分:0 
回复 27楼 风吹过b
我现在发现picture和image在绘图种不同作用,在picture中,采用cls后,然后line,一点也不闪。反之image,无论怎样都不行。
2010-10-15 12:00
快速回复:vb6绘制活动图案-虚拟仪表的指针,每次都要更新背景,太占用系统资源了 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018041 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved