野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 33359|回复: 15

自制GUI--第2篇--基于freeRTOS

[复制链接]
发表于 2017-11-16 14:54:21 | 显示全部楼层 |阅读模式
本帖最后由 TUATS 于 2017-11-19 11:13 编辑

TGUI的第二篇:
第三篇已出:http://www.firebbs.cn/thread-19080-1-1.html

记录一下自己写GUI的过程,之前直接就把一个不是特别完整的,或者说BUG很多的版本发上去了。各种不好意思。
这是之前的网址: http://www.firebbs.cn/forum.php?mod=viewthread&tid=19023

之前的GUI实现方法都没讲,以后慢慢讲把。但是代码都公开,虽然很难看。但是很欢迎大家提意见。
这里还是感谢火哥支持,让我有了做下去的动力!!!
之前留下了一些自己很难解决的问题,这次大概全部都解决了(但是有些都是走擦边球
上次发的问题 :
     问题 1:当某个控件注册重绘后再消失时,桌面还留下了之前的控件的图案,之前解决方法在控件销售时重绘桌面(这样当所有小按键消失时都会导致背景重绘,所以会出现屏幕经常闪动)
     解决 :在呼出要覆盖当前界面的控件时,先把要覆盖的数据保存到新建的buffer里面,再覆盖,当当前控件回收时再从buffer中把数据读回。如图:(字丑不要嫌弃)
    1.JPG
     问题 2:当有呼出一些控件时(如键盘),在去按其他被键盘覆盖的控件时,又会把键盘覆盖。(这个不符合逻辑,按理说按键应该时最高层的,谁都无法覆盖它。)
                 问题的本身是所有的控件不知道谁把谁覆盖了,各个的显示层次是怎么样的。
     解决 :当创建,或呼出一个新的控件时,把自己进行采样成一个个点,会遍历控件树(上一篇稍微提过,我是用树来实现相应关系的)去一个个比对是否采样点在控件范围中,若是则把控件标记为被覆盖,设置覆盖其的对象是新的控件。这样当被覆盖的控件被点按时,上面的控件也会被刷新,保证一直被覆盖。如图:(这个会一点出现闪屏,但是是我目前不大改代码下最好的方法了。)
      2.png
     问题 3:一些按钮会出现bug,导致GUI奔溃,卡带。(这个想想就害羞 0 0 ----不完整的就发出来了。)

     这个纯属自己没考虑好,现在已经解决。

注意: 左上角的‘ X ’是我测试用的 不要按得太频繁,会出现脏图像。
      demo.jpg

之后将要实现 1.布局类(可以方便的布局控件,不需要计算绝对坐标)
                    2.重写绘画函数(现在都是使用火哥的函数,为了方便GUI其他板子方便移植)
                    3.完成可移植性
我用Cpp写的所以堆的要求较大,因为是树结构我中间用了递归,所以栈的要求也不小

一样,原代码已经上传了。(只支持f429----是整个项目)欢迎大家指点,提意见。
GitHub:https://github.com/909452726/TGUI
百度网盘:http://pan.baidu.com/s/1jHQDKME





回复

使用道具 举报

发表于 2017-11-16 14:59:47 | 显示全部楼层
已经转发5个2000人大群
回复 支持 反对

使用道具 举报

发表于 2017-11-16 15:00:34 | 显示全部楼层
six six six ,不能再6了
回复 支持 1 反对 0

使用道具 举报

发表于 2017-11-16 15:04:18 | 显示全部楼层
上次赞了你,这次还赞你,你要是下次再来,我继续赞你
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-16 15:04:22 | 显示全部楼层
fire 发表于 2017-11-16 14:59
已经转发5个2000人大群

谢谢火哥有点小紧张
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-16 15:08:39 | 显示全部楼层
wancy2017 发表于 2017-11-16 15:04
上次赞了你,这次还赞你,你要是下次再来,我继续赞你

谢谢支持 c++真的不大会 有些没底
回复 支持 反对

使用道具 举报

发表于 2017-11-16 15:30:43 | 显示全部楼层
TUATS 发表于 2017-11-16 15:08
谢谢支持 c++真的不大会 有些没底

大神,还收徒弟嘛。
回复 支持 反对

使用道具 举报

发表于 2017-11-16 15:31:41 | 显示全部楼层
TUATS 发表于 2017-11-16 15:08
谢谢支持 c++真的不大会 有些没底

收下我的膝盖吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-16 15:57:13 | 显示全部楼层
与孤独和好 发表于 2017-11-16 15:30
大神,还收徒弟嘛。

我不是大神,我是根据火哥的教学才进入这个坑的。如果感兴趣可以一起做哦
回复 支持 反对

使用道具 举报

发表于 2017-11-16 20:15:50 | 显示全部楼层
巧了,我也时用C++写源码的,说实话C++的有些编程特性比较好用,最明显的就是类和变量声明,我觉得堆栈要求应该一样的,过大的数据还是定义成全局变量比较好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-16 20:40:02 | 显示全部楼层
纸he 发表于 2017-11-16 20:15
巧了,我也时用C++写源码的,说实话C++的有些编程特性比较好用,最明显的就是类和变量声明,我觉 ...

主要是因为要做GUI,所以按钮,滑块,进度条,选择,列表,静态框都是对象,创建对象就是要在堆中开辟。没办法的。我的整个GUI是建立在左孩子右兄弟二叉树上的,我中间为了方便用了递归,所以栈的占用也不小
回复 支持 反对

使用道具 举报

发表于 2019-5-20 14:47:49 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 2019-7-22 09:41:08 | 显示全部楼层
知道不如想到,想到不如悟道。内容整理的很客观!666
回复 支持 反对

使用道具 举报

发表于 2019-8-12 09:43:31 | 显示全部楼层
前排围观~~~
回复

使用道具 举报

发表于 2020-7-17 23:49:07 | 显示全部楼层
真厉害啊
回复

使用道具 举报

发表于 2020-8-7 08:47:11 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 16:04 , Processed in 0.040249 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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