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的话就没用了,但这个窗口切换确实很复杂,看起来也操作比较快.
随机推荐
- ios侧滑返回:完美解决 interactivePopGestureRecognizer 卡住的问题
interactivePopGestureRecognizer是iOS7推出的解决VeiwController滑动后退的新功能,虽然很实用,但是坑也很多啊(比如在rootViewcontroller下 ...
- Windows键
Windows键+D: 最小化或恢复windows窗口 Windows键+U: 打开“辅助工具管理器” Windows键+CTRL+M 重新将恢复上一项操作前窗口的大小和位置 Windows ...
- matplotlib表面三维图
1.basic numpy.meshgrid 由一维数组到二维数组,用于生成网格数据 matplotlib python绘图库 2.code In [88]: from mpl_toolkits.mp ...
- 监听EditText字数
editContent.addTextChangedListener(new TextWatcher() { private CharSequence temp;private int editSta ...
- day14—JQuery编程基础
JQuery 1.什么是jQuery jQuery是一个优秀的JavaScript框架.一个轻量级的JavaScript类库.jQuery的核心理念是Write less.Do more. 使用jQu ...
- layer 不居中的坑爹问题
使用了该代码弹出一个图片.但居然不居中 var layer_index = layer.open({ type: 1, title: false, closeBtn: 0, area: '516px' ...
- 搭建SSH框架整合Struts2和Spring时,使用@Autowired注解无法自动注入
© 版权声明:本文为博主原创文章,转载请注明出处 1.问题描述: 搭建SSH框架,在进行Struts2和Spring整合时,使用Spring的@Autowired自动注入失败,运行报错java.lan ...
- 安卓SAX解析XML文件
XML文件经常使用的解析方式有DOM解析,SAX解析. 一.Sax SAX(simpleAPIforXML)是一种XML解析的替代方法. 相比于DOM.SAX是一种速度更快,更有效的方法. 它逐行扫描 ...
- org.mockito.exceptions.misusing.MissingMethodInvocationException: when() requires an argument which has to be 'a method call on a mock'
异常原因: 1.mockito的jar包中缺少方法 2.mock方法的时候,返回的是对象,而对象没有重写equals方法 3.mock的实例方法调用方法错误 解决方法: 1.用powermock中的a ...
- 《HBase in Action》 第二章节的学习总结 ---- HBase基本组成
准备工作:采用的HBase版本是:CDH4.5,其中的Hadoop版本是:hadoop-2.0.0-cdh4.5.0:HBase版本是:hbase-0.94.6-cdh4.5.0: Hbase的配置文 ...