硬汉嵌入式论坛

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

[emWin] 关于页面重绘的若干不解问题

[复制链接]

270

主题

605

回帖

1415

积分

至尊会员

积分
1415
发表于 2017-5-31 11:12:18 | 显示全部楼层 |阅读模式
使用控件最方便的恐怕就是页面的重绘不用自己去管理,emwin会搞好。
比如在多页面下的切换时,返回上一个页面的话,用户都不用管,只要结束前一个页面就好了,上一个页面就自动显示出来了。

但是,这应该是隐藏了不少东西和操作的。
最近研究了下下ucgui的代码,也没看懂是怎么在结束上一个页面后,就把前一个页面内容显示出来的。
其实主要还是目前碰到两个比较棘手的问题。
1.在多个页面的显示系统中,在每一个WIN窗口内,都有一个显示时间的TEXT,这个时间以分钟为单位进行更新。
  现在遇到的问题就是,进入到新的(下一个)页面内,时间是能实现更新的,通过在页面初始化时获取到当前页面的时间TEXT的句柄。
  但是,当返回到前一个旧页面时,就无法获取时间TEXT的句柄了。
  想了好久,也没啥好方法可以实现。能想到的唯一的方法就是在WM_PAINT里面使用标志,然后,每次进入WM_PAINT消息时,重新获取时间TEXT的句柄。
  这样做,需要一大堆的代码用于维护这种固定的页面操作模式,需要严格谨慎的设置好相应的标志。
2.在需要多语言这种常见应用的情况下,使用系统自带的这种重绘机制,并不好实现语言(实质是显示内容)的自动更新。
比如,常见的语言切换就是通过一个DROPDOWN或直接BUTTON来进行切换,而在选择了不同的语言时,就要立即显示出来。
但是,现在emwin这种机制,对于页面的显示内容,只是在页面创建的时候会调用一次用于绘制。
在重绘时,并不会再次对内容进行重新绘制,这就导致没法自动即时的对页面内容进行更新

不知道对这两种现象有什么好解决方法没有
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-5-31 12:02:58 | 显示全部楼层
1. 定时器去更新就好了,不用用户去管理。
2. 直接设置窗口无效化,对于多种语言,设置个全局变量,可以参考我们ATM机的例子。
回复

使用道具 举报

270

主题

605

回帖

1415

积分

至尊会员

积分
1415
 楼主| 发表于 2017-5-31 13:38:26 | 显示全部楼层

回 eric2013 的帖子

eric2013:1. 定时器去更新就好了,不用用户去管理。
2. 直接设置窗口无效化,对于多种语言,设置个全局变量,可以参考我们ATM机的例子。 (2017-05-31 12:02) 
1.定时器更新是不错,可是每个页面都要弄一个WM_TIMER消息啊。我还测试过用一个独立的窗口来显示时间,然后就一直放在最顶层显示,不受页面切换的影响,这样是简单。可又不能自动重绘,经常把其他窗口给遮挡住了。
2.窗口无效化只能是产生重绘功能。但重绘的内容实际上是在页面创建的时候已经给定的,并不会使用新的内容,比如一个BUTTON,名称我是这样弄的
button_name[2] = {"name","名称"},通过一个language_id来调用button_name中的字符串,在无效化窗口前,需要再次Button_SetText()来设置好BUTTON名,才能显示出语言的切换来
回复

使用道具 举报

270

主题

605

回帖

1415

积分

至尊会员

积分
1415
 楼主| 发表于 2017-5-31 14:10:12 | 显示全部楼层

回 eric2013 的帖子

eric2013:1. 定时器去更新就好了,不用用户去管理。
2. 直接设置窗口无效化,对于多种语言,设置个全局变量,可以参考我们ATM机的例子。 (2017-05-31 12:02) 
关于第2点多语言的,我看了下这个ATM例程里的实现。
例程里面是在开始页面进行语言选择的。这就可以避免已经有页面创建后再进行更改的问题了。
也就不存在我说的重绘中,更改控制显示内容的问题了
回复

使用道具 举报

270

主题

605

回帖

1415

积分

至尊会员

积分
1415
 楼主| 发表于 2017-6-2 07:33:26 | 显示全部楼层

回 eric2013 的帖子

eric2013:1. 定时器去更新就好了,不用用户去管理。
2. 直接设置窗口无效化,对于多种语言,设置个全局变量,可以参考我们ATM机的例子。 (2017-05-31 12:02) 
关于你说的第1点,用定时器去更新页面上的时间和日期显示问题。
这种方法大概是要怎么实现呢?

刚看了下关于TIMER的操作,只能是在创建TIMER的时候指定WM_TIMER消息的接收窗口的句柄吧。像我这样,需要在每个页面的中的一个TEXT内显示时间和日期的话,那是不是要在每个页面创建时就创建一个定时器,然后,这个页面被关闭时,就删除这个定时器?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-19 12:53 , Processed in 0.039376 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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