野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 21243|回复: 6

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

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

第三篇了
前两篇思维有点混乱,但是都贴出来了(谢谢大家的支持):
第一篇:http://www.firebbs.cn/forum.php?mod=viewthread&tid=19023&extra=
第二篇:http://www.firebbs.cn/forum.php?mod=viewthread&tid=19046&extra=
最近去投简历了,就没有太多的进展(添加了布局类),这次我就大概记录自己做这个GUI的思路吧。
1.
在第一篇的时候我简单的讲过我这个是基于 孩子兄弟二叉树 的映像表达。
如图:(二叉树中,左边的为孩子,右边的为兄弟)
tree.JPG
有什么好处呢?当时觉得比较容易管理,而且思路清晰。
如图:这样一个根节点会有两个孩子窗口(WinA,WinB),然后窗口中又有孩子控件(a,b1,b2),WinA和WinB是兄弟关系,b1和b2也是兄弟关系,查找起来就很方便。
treeDemo.JPG
因为我选择的是二叉树,所以当要重绘全部的时候,只要用树的先序遍历就能把所有的窗口控件全部都画出来。如果我想要注销某一个窗口或控件,通过把他们从树中分离,其他连带的孩子也会背分离,同样的添加也很方便。
如图:(便于遍历,删除,添加,这是我的主要目的)
treeAddDelete.JPG
上面讲的是GUI的结构存储情况。
下面的GUI控件中的消息机制,我有点参考MiniGUI(其实也没怎么研究MiniGUI >_< 大神们莫见怪)

2.
TGUI的所有控件的交互都是基于消息机制的。
怎么说呢,就是每一个线程会维护一个消息队列。(我这里用的是freeRTOS 线程自带的队列--原理一样)
然后每个控件/窗口都会有 窗口过程函数 (这需要我们自己实现),用来实现触发该控件/窗口时应该做的处理过程。
如图:描述了一个 创建控件/窗口 注册 重绘 循环接收信息处理 的全过程。(当然也可以自己动态创建,这个是后话了 其实原理差不多)
msg.JPG

3.
这一次我多添加了布局类(以后添加控件,布局控件比较方便吧)参考于Java的布局类。我主要实现了
流式布局(flowLayout):一个一个控件按顺序排列,一行排列不下就换行接着排列,到时只需用addWin函数添加控件就好
flowLayout.JPG
边框布局(borderLayout):把指定的区域分成东、西、南、北、中五个区域存放控件
borderLayout.JPG
网格布局(gridLayout):这个顾名思义就把窗口划分为大小一样的网格,用控件进行排列(都继承一个layout基类,用的方法都差不多。)
gridLayout.JPG

还有可移植性还是没想好,画图的函数还没做。主要就是画图函数和后面的LCD驱动各有不同,还在想中。
最后还是贴上我的资源:
GitHub:https://github.com/909452726/TGUI
百度网盘:http://pan.baidu.com/s/1pLyZH0n

回复

使用道具 举报

发表于 2017-11-19 13:13:24 | 显示全部楼层
666666666666666  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-19 13:36:13 | 显示全部楼层

谢谢火哥支持
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-19 20:04:47 | 显示全部楼层
jack_zhou 发表于 2017-11-19 19:26
http://bbs.armfly.com/read.php?tid=44492&fpage=3 看这个,你写的这个实在没法看,系统性不太好

haha 自然是这样,第一次做GUI做个小型的 就已经很心满意足了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-20 08:51:01 | 显示全部楼层
jack_zhou 发表于 2017-11-19 21:31
建议多采用系统回掉,规则列举和设计模式,这样移植很方便,就不会过多的依赖硬件

感谢建议,对于C++我还在学习中
回复 支持 反对

使用道具 举报

发表于 2019-6-5 10:16:39 | 显示全部楼层
666666666666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2019-6-23 16:23:37 | 显示全部楼层
做的多了自然就会更好。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-6 13:52 , Processed in 0.051670 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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