stm32 emwin 2D 绘图绘制颜 {MOD}一半就修改了

2019-12-15 12:24发布

本帖最后由 蜗牛蜗牛 于 2018-10-20 09:37 编辑

介绍如下: 通过对话框创建第一个界面后按一个按钮 进入这个界面
这个界面是在paint里面重绘的24个圆形代表红绿灯,这个界面创建了一个定时器,设想的是每秒刷新一次paint内24个圆(圆的填充颜 {MOD}是红黄绿黑轮流显示,黑暂时不显示),定时器 重绘调用这个函数 WM_Paint( pMsg->hWin);//
现在的问题是:如图所示填充元会出现半个情况并且串 {MOD}了,还有就是通过打印我看出,每一秒调用一次  WM_Paint( pMsg->hWin) 。paint消息内容会进入3次,每次进入paint 只是重绘一个整屏幕三分之一左右,
我怀疑是整个有个可能和emwin的对这个屏幕绘制机制有关系,或者底层绘制设置有关系,下面会上传。c的源码,我在总循环中调用guidaly。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
cock
1楼-- · 2019-12-15 18:15
本帖最后由 cock 于 2018-10-21 21:46 编辑

EMWIN这个图形系统在高分大屏上是相当的蛋痛,加大图形系统的内存,可以减少屏幕绘制的次数,但其它地方内存就不够了。
我试过的一块800X480的屏,得分十几次绘制才能完成。每次绘屏时是从上向下输出,大约就是一次绘屏输出几十行。全屏得分十几次才能绘完。
这个绘屏操作得花不少时间,如果在绘制期间,你在定时程序改变了灯的颜 {MOD},就会绘出不同的灯 {MOD}。
解决办法倒简单,就是别用全屏刷新。窗口获得屏幕时,在paint消息中绘出底图,就是大家说的qfp封装。然后在定时器程序中,先获得屏幕指针,在屏上逐一按底 {MOD}绘圆,在圆中绘数字。如果圆灯位置是一直不变的,那程序就简单之极。如果灯位置会动,就得先将灯所在的底图对应部分重绘一下。总之,STM32的屏幕上,尽量不要全屏重绘。
xiaoyigechaos
2楼-- · 2019-12-15 21:12
高大上的交通灯
Jmhh247
3楼-- · 2019-12-15 23:47
 精彩回答 2  元偷偷看……
xuekcd
4楼-- · 2019-12-16 04:19
我也以为是个封装!嘿嘿嘿!
OOXX110
5楼-- · 2019-12-16 09:10
咋一看以为是LQFP封装。
tangnyzl
6楼-- · 2019-12-16 09:55
是不是重入了,先把你的timer间隔加长试试

一周热门 更多>