uCGUI 按键窗口切换机制(更新篇)
在之前文章中,讲述了一个低内存使用量的的窗口切换机制。有人会问,低内存使用量是多低呢,我这里举个例子。我有一个项目中使用到本切换机制,128*64的单色屏,初步计算有105个窗口(后面还会增加),总内存使用量(包括任务栈)=105*3*4(窗口树) + 1024(公共buff) + 512(任务栈) + 1024*3(uCGUI动态内存) = 6k左右。从这个数字可以看出内存算是使用比较少的了。毕竟有100多个窗口,我在设计时也就只做了10多个窗口,这100多个窗口就是由10多个窗口大量复用组合得到的。
当然本切换机制只是给读者提供一个灵感,不一定就按笔者的框架来做项目,可以只使用这种思想打造更优秀的架构。毕竟项目千差万别,本架构更适合使用按键来切换窗口的用户,低内存的用户,窗口深度级深及多的用户。
在前一篇文章中有读者留言,问了很多问题,之前的窗口确实有很多不完善的地方。这里我直把以前的工程进行升级,主要完善原工程中缺失部分。更新内容主要如下:
1,增加高级窗口(突发事件窗口)切换代码。
2,增加多语言支持接口。
3,接口变更,去除之前繁琐的外部调用接口。
这里还要讲点本机制的特点,本切换机制只进行在一个任务中,也就类似一个大while(1)循环,这样的操作有他特有的优点,第1可以共有一个大公共buff而不用担心内存互斥问题。这时一定会有朋友会问,外部任务调用时如何操作呢?这里我把供外部调用的接口统称为“外部调用接口”。“外部调用接口”我之前的处理方式是,外部任务调用gui内部函数时,把gui内部的函数指针及参数部分同时存入队列中,直到gui运行到读队列时,运行这些函数。这样就可以很好解决互斥问题。后来我发现,这种方式过于繁琐,以至于有大量的函数需要进行注册。现在做了一定修改,只把要传递的参数保存在中间变量中,gui运行时查询是否有参数变更,如果有运行变更部分的代码。这样大大简化了程序复杂度,也更容易理解。
有人可能会担心这窗口机制的移植性问题。这里我要说下,本窗口我在vc,linux,ucos-ii,ucgui-iii等平台都进行过使用,表现都非常良好,做到了一套代码多平台使用。
中文显示,我只做了简单演示,只把三个窗口使用了中文。
工程链接:
http://pan.baidu.com/s/1hqoZgAo
uCGUI 按键窗口切换机制(更新篇)的更多相关文章
- uCGUI 按键窗口切换机制
前段时间在做一个窗口项目,这个项目菜单项过多,在管理起来比较麻烦.想做一个高效移植又方便的一个切换机制.后来在网上多方查找这方面资料,但是感觉比较少.后来自己整理出了这个结构,希望对后来朋友有所帮助. ...
- Win+Tab键实现自定义程序列表间的窗口切换
程序是用AutoHotkey语言写的, 说明: 以自己使用频率的顺序在ExeList自定义的程序间切换 切换可以以所有窗口切换,也可以按程序组切换(比如在word窗口间切换) 程序组可以分别定义排除的 ...
- qt布局管理-缩放、多窗口切换
关于缩放的布局 所有控件要求与主窗口同时缩放,那么在所有控件设置好布局后,最后点击最外侧的主控件,选择水平布局或者垂直布局即可. 另外每个空间的属性可更改,如SizePolicy用于设置空间是否可缩放 ...
- ubuntu 18.04多应用窗口切换的快捷键使用指南
前记 使用ubuntu时间长了,很厌烦用鼠标来点来点去.重复操作的,还是快捷键比较方便.在多窗口切换方面,熟悉了几个快捷键之后,顿时感觉神清气爽.这里就推荐给大家学习一下,提高工作效率啊. 常用快捷键 ...
- Selenium(六):frame切换、窗口切换
1. 切换到frame index.html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...
- 如何使用cgdb(一)——窗口切换
cgdb是一个轻量级的基于控制台的多窗口gdb调试界面.除了标准的gdb控制台之外,cgdb还提供了一个分屏视图,可以在执行的时候显示具备语法高亮的源代码.键盘控制是仿照vim设计的,所以vim用户使 ...
- Qt界面编程之多窗口切换
1.基础知识 信号和槽 信号和槽都是函数,用来完成信号间的协同操作 2.多窗口切换实例 功能 实现登录和重新登录功能 组成 登录界面 和主窗体界面 3.源代码提供
- selenium测试(Java)--多窗口切换(十三)
selenium测试(Java)--多窗口切换(十三) 如果遇到点击按钮或链接后出现新窗口的情况,就需要使用窗口切换的方法. 本例中就是先打开百度搜索界面,然后利用js打开一个百度新闻界面,然后通过s ...
- eclipse中的窗口切换快捷键
Ctrl+Shift+F6 很简单,如果以后改用IDEA的话就没用了,但这个窗口切换确实很复杂,看起来也操作比较快.
随机推荐
- Android服务类Service具体解析
Service有什么作用? 很多人不明确service是用来干嘛的.事实上Service作为Android四大组件之中的一个,能够理解为一个执行在后台的Activity.它适用于处理一些不干扰用户的长 ...
- ISE封装IP
1.综合成ngc文件,然后再黑盒调用,再写一个端口文件(写个空壳文件,就是定义输入输出,在工程里面调用这个文件就行,把ngc放到工程目录下).
- HTML5 2D平台游戏开发#10Wall Jump
这个术语不知道怎么翻译比较贴切,但并不妨碍对字面意思的理解,大概就是飞檐走壁.比如: 这是游戏<忍者龙剑传>中的场景,玩家可以通过操纵角色在墙面上移动并跳跃. 首先需要实现角色抓墙这一动作 ...
- php获取post内容方式
PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型. php获取post参数的几种方式 1.$_POST['paramName'] 只能接收Co ...
- "下列引导或系统启动驱动程序无法加载: cdrom"的解决方案
1.进入注册表(开始->运行->regedit) 2.展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\cdrom 3.把Sta ...
- 使用jstl标签报错:According to TLD or attribute directive in tag file, attribute value
原来jstl标签版本不一样,标签支持不一样. jstl1.0标签库不支持表达式,如: <c:if test="${query01 == null}"> <js ...
- 用PreferenceActivity做一个标准的设置界面
最后接触到一个任务,做一个工厂设置,在我看来工厂设置不需要多美观,但是一定要方便修改,添加功能,再就是使用方便,我就想到了用PreferenceActivity,android系统的settings就 ...
- 关于函数的return
function add(x, y) { var total = x + y; return total; } add(5,10); 关于函数的return 我一开始是认为没有什么用的 后来在项目中 ...
- iOS 3DES加密
本文转载至 http://www.cocoachina.com/bbs/read.php?tid=177167 -(NSString *)TripleDES:(NSString *)plainText ...
- SDOI2012 Round1 day2 集合(set)解题报告
//=====================以上为官方题解==============// 数据略水,暴力枚举50. 把边按照升序排一遍,在询问,水过. #include<cstdio> ...