硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4045|回复: 15
收起左侧

[emWin] 如何禁止窗口的重绘

[复制链接]

76

主题

237

回帖

465

积分

高级会员

积分
465
发表于 2020-3-11 10:05:57 | 显示全部楼层 |阅读模式
本帖最后由 kokoromi 于 2020-3-11 20:20 编辑

emWin有没有什么办法能禁止窗口的重绘,在我需要的时候一起重绘?比如往一个列表里加入一行(就是在窗口回调函数中加入一行,并不是一次性加入所有行),然后去执行别的任务,满足条件后再加入一行,等所有行都加满后再一次性刷新窗口。现在的效果是可以看到加入行的动作(因为每加入一行emwin就会刷新窗口),我想要的效果是所有行都加完后一次性刷新显示出来,这个该怎么做?

现在的显示效果是这样的,能看到项目增加的过程,感觉效果不好,想暂时禁止重绘,等都加完了一起重绘,一次性全部显示。
视频貌似显示不出来,直接贴网址吧:https://v.youku.com/v_show/id_XNDU4MzQxNjc0OA==.html
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2020-3-11 12:55:47 | 显示全部楼层
貌似没有这方面的函数,试试disable函数是否好使

另外,可以先绘制到存储设备里面,全部绘制完毕了一起在回调函数里面刷,是否满足需求。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-3-11 14:27:18 | 显示全部楼层
eric2013 发表于 2020-3-11 12:55
貌似没有这方面的函数,试试disable函数是否好使

另外,可以先绘制到存储设备里面,全部绘制完毕了一起 ...

我已经用WM_MULTIBUF_Enable(1)使能了三缓冲模式,再用存储设备不冲突吗?貌似存储设备效率低...
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2020-3-11 15:36:12 | 显示全部楼层
kokoromi 发表于 2020-3-11 14:27
我已经用WM_MULTIBUF_Enable(1)使能了三缓冲模式,再用存储设备不冲突吗?貌似存储设备效率低...

不是的,这个所说的存储设备,不是指的窗口使用存储设备,这里是指的存储设备章节的那种api绘制函数。
回复

使用道具 举报

29

主题

514

回帖

606

积分

金牌会员

积分
606
QQ
发表于 2020-3-11 15:54:13 | 显示全部楼层
你的产品是触摸控制? emWin控件的变动 会自动补全默认的一套消息队列,有内容变动就自动刷新。

我的产品是物理按键控制,消息也是自己转发,界面多数是自己2D单独画。单独的按键触发,单独控制独立的控件刷新,或者临时叠加新的2D区域显示需要的新内容。
Releasing your creativity
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-3-11 17:53:32 | 显示全部楼层
eric2013 发表于 2020-3-11 15:36
不是的,这个所说的存储设备,不是指的窗口使用存储设备,这里是指的存储设备章节的那种api绘制函数。

那在窗口中怎么用这个API呀,感觉有点乱啊,我已经使能了自动三缓冲,即便使用这个存储设备的API,貌似也有点冲突吧,懵了...
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-3-11 18:12:14 | 显示全部楼层
廷润 发表于 2020-3-11 15:54
你的产品是触摸控制? emWin控件的变动 会自动补全默认的一套消息队列,有内容变动就自动刷新。

我的产 ...

你这个感觉很麻烦的吧,都是自己整的。我这个也是按键,没有触摸。现在没找到好的办法,默认的刷新感觉无法控制。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2020-3-12 09:09:31 | 显示全部楼层
kokoromi 发表于 2020-3-11 18:12
你这个感觉很麻烦的吧,都是自己整的。我这个也是按键,没有触摸。现在没找到好的办法,默认的刷新感觉无 ...

你视频里面弹出的界面是啥,listview的,还手动创建的。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-3-12 10:31:24 | 显示全部楼层
eric2013 发表于 2020-3-12 09:09
你视频里面弹出的界面是啥,listview的,还手动创建的。

就是Listview,自带的那个CHOOSEFILE对话框感觉太难看了,不好用。Listview这个灵活度高点,但是一条一条显示这个感觉不太好,暂时还没想到好的办法。之前你说的禁用窗口那个函数不起作用,不知道为啥....
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2020-3-12 10:42:43 | 显示全部楼层
kokoromi 发表于 2020-3-12 10:31
就是Listview,自带的那个CHOOSEFILE对话框感觉太难看了,不好用。Listview这个灵活度高点,但是一条一条 ...

如果是listview的话,你这个显示太卡了。

看我的这个视频展示吧,从4分钟开始看即可。里面有个音乐播放器和后面的视频播放器加载

https://v.youku.com/v_show/id_XM ... m=a2hzp.8253869.0.0
回复

使用道具 举报

11

主题

130

回帖

168

积分

初级会员

积分
168
发表于 2020-3-12 14:09:05 | 显示全部楼层
可以考虑这种方式,重写回调函数,自己做数据判断,如果需要重绘就调用默认的回调函数。如果不需要就忽略此次的PAINT事件。
回复

使用道具 举报

5

主题

244

回帖

259

积分

高级会员

积分
259
发表于 2020-3-12 14:44:48 | 显示全部楼层
试试隐藏窗口?添加内容的时候把窗口隐藏,添加完成之后再显示出来。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-3-12 18:21:13 | 显示全部楼层
eric2013 发表于 2020-3-12 10:42
如果是listview的话,你这个显示太卡了。

看我的这个视频展示吧,从4分钟开始看即可。里面有个音乐播 ...

我这个文件信息的读取是放在一个单独的任务中,没有放在ListView的所在的那个对话框里一起读取,文件任务每读取一个文件项,就把信息以自定义消息的方式发送给Listview所在对话框,对话框回调函数更新这条文件项后发送系统消息通知文件任务继续读取下一个文件项,以此类推,所以导致了这种看似比较卡的现象。这么做就是想把文件的操作和GUI显示分开,结果出现了这个问题...
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-3-12 18:22:21 | 显示全部楼层
有梦为马 发表于 2020-3-12 14:09
可以考虑这种方式,重写回调函数,自己做数据判断,如果需要重绘就调用默认的回调函数。如果不需要就忽略此 ...

你的意思是重写LISTVIEW这个控件的回调函数吗?我试试看。
回复

使用道具 举报

76

主题

237

回帖

465

积分

高级会员

积分
465
 楼主| 发表于 2020-3-12 19:47:13 | 显示全部楼层
DX3906 发表于 2020-3-12 14:44
试试隐藏窗口?添加内容的时候把窗口隐藏,添加完成之后再显示出来。

综合比较了大家的建议,最终觉得你这个可以,我稍微改了一下,在Listview控件的显示区域(列首除外)覆盖增加一个IMAGE控件,整个沙漏图,最开始显示这个,直接覆盖列表项的加载过程,等加在完毕了再隐藏这个IMAGE图片,试验了,效果不错,实现起来比较简单。同时也感谢其他人的建议~
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
发表于 2020-3-13 09:29:42 | 显示全部楼层
本帖最后由 myxiaonia 于 2020-3-13 20:48 编辑
DX3906 发表于 2020-3-12 14:44
试试隐藏窗口?添加内容的时候把窗口隐藏,添加完成之后再显示出来。

我认为这个比较靠谱,据我所知,隐藏后自动禁止重绘
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-18 14:44 , Processed in 0.599557 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表