硬汉嵌入式论坛

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

[emWin] 我创建了一个窗口定时器,调试也能进到里面,但是显示的现象就是我在绘下一个界面的时候,当前窗口定时器的内容才显示

[复制链接]

16

主题

34

回帖

82

积分

初级会员

积分
82
发表于 2021-12-31 10:20:35 | 显示全部楼层 |阅读模式
请教一下硬汉哥,我使用WM_CreateTimer为当前窗口创建了一个100ms的定时器,但是执行到这个timer的时候,加的log信息都打得出来,就是界面上没有显示出timer调用的控件函数,反而是在我执行下一个窗口内容的时候,这个窗口的timer才出现了,麻烦硬汉哥帮我看看是什么原因,关于emwin的代码我私信给你了,多谢!
回复

使用道具 举报

16

主题

34

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2021-12-31 10:30:22 | 显示全部楼层
我把代码放这里了,麻烦硬汉哥空了帮我看一看,
链接:https://pan.baidu.com/s/1abQEg-cdLIUiGZA4k0xXSA
提取码:6yfg
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2021-12-31 10:49:42 | 显示全部楼层
你好,请在WM_PAINT事件里面绘制图形或者在调用控件函数后使用WM_InvalidateWindow(hItem)函数刷新界面。
回复

使用道具 举报

16

主题

34

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2021-12-31 10:59:37 | 显示全部楼层
科长大叔 发表于 2021-12-31 10:49
你好,请在WM_PAINT事件里面绘制图形或者在调用控件函数后使用WM_InvalidateWindow(hItem)函数刷新界面。

你好,谢谢回复,我之前在WM_TIMER内使用WM_RestartTimer重启定时器,是能将我之前在WM_Timer显示相关控件内容显示出来的,我现在就是怕定时刷新会影响性能,但是我又想在界面实现一个动态更新,例如电量等信息,不知道您有什么好的方法来解决这个问题吗
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2021-12-31 11:25:27 | 显示全部楼层
我以前做过一个移动控制台,主界面上面一小部分作为状态栏(是单独的一个窗口大小800*26)显示时间、电量、网络和USB等状态信息,然后使用WM_Timer定时时间大概800ms,在该窗口的回调函数的WM_TIMER事件中调用WM_InvalidateWindow函数触发WM_PAINT事件,然后在WM_PAINT事件中刷新这个状态栏窗口。已经使用了快两年了没出现什么问题,我这个控制台的屏幕分辨率是800*480的,MCU使用的是STM32F429。个人建议(不一定对):1.定时刷新时间不宜太快;2.定时刷新的区域最好小一点;3.可以自行使用2D绘制函数进行绘制不使用控件;
回复

使用道具 举报

16

主题

34

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2021-12-31 11:41:29 | 显示全部楼层
科长大叔 发表于 2021-12-31 11:25
我以前做过一个移动控制台,主界面上面一小部分作为状态栏(是单独的一个窗口大小800*26)显示时间、电量、 ...

谢谢指点,我现在要刷新的内容和你大致差不多,也是在顶部有个状态栏,显示电量,蓝牙这些,昨天我测试的时候就发现,在我通过串口大量发数据的时候,这里是模拟短信接收,在我停止发送时,我切换了界面,显示的字体就花了,我感觉像是在读字库的时候内存不够了吗?但是我没在窗口restart定时器后,模拟发短信的时候,切换界面后,字体这些就不会花,想请教下你之前做使用了外置字库吗,再次感谢你分享,多谢
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2021-12-31 12:20:23 | 显示全部楼层
个人建议你不要在WM_Timer中调用控件,另外个人感觉不太像内存问题(如果你怀疑内存问题,可以加大堆栈大小)。实在不好意思我上次那个移动控制台因为就是指定显示固定的几个字,所以没有使用外置字库,外置字库的方案你可以参考下硬汉哥的例程。
回复

使用道具 举报

16

主题

34

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2021-12-31 14:16:05 | 显示全部楼层
科长大叔 发表于 2021-12-31 12:20
个人建议你不要在WM_Timer中调用控件,另外个人感觉不太像内存问题(如果你怀疑内存问题,可以加大堆栈大小 ...

嗯嗯,我把调用控件这些都加在了WM_PAINT里面,后面我感觉像是字体导致的花屏,我看了下我之前移植汉字字库那块,英文字符这些使用的是定义了一个静态数组,中文汉字就是从flash读,我就把那些带英文数字的改成了显示汉字,发现就没有花屏了,我想可能我也从flash读英文字符这些估计问题就解决了,谢谢你的分享,给了我很多帮助,祝您生活愉快~
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-15 16:32 , Processed in 0.039468 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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