看了“自己动手设计并实现一个linux嵌入式UI框架”显然没有尽兴,因为还没有看到庐山真面目,那我今天继续,先来说说,我用到了哪些知识背景。如:C语言基础知识,尤其是指针、函数指针、内存分布,linux 基础知识、如消息队列、framebuffer、多线程、多线程同步、等,数据结构、算法(如链表、队列等),window .netframework 框架设计思想,设计模式如 mvc、观察者、单例、工厂等。知识点有点多,每个知识点有机的组合在一起,形成了一个知识网,构成了一个系统。以上提到的知识点,如果不是很了解推荐看看。

一般来说UI框架需要包含哪些组件?我来整理下:

首先UI框架是要展现给用户看的,那么一个窗口肯定是要有的;

其次,是在该窗口应该还可以显示其他控件如按钮、文本框等;

然后是支持交互操作,那么它就支持事情处理,如触摸事件、按键事件等;

最后框架是给开发人员开发应用用的,那么要有友好的接口。

我设计的这个嵌入式UI框架以表达设计思想,逻辑处理为目的,内部设计与实现会简单明了,尽量减少复杂度。

“一年之计在于春,一天之计在于晨”,一个UI框架之计在与数据结构,都硕算法+数据结构就是程序的灵魂,我们就来个千里之行,始于数据结构。

我划分了几个部分,如上图所示,取最关键的成员(结构与方法),描述会比较啰嗦,我直接列出公共的数据结构:

typedef  void(*EventHandler)(void *object, void *msg);

typedef  int (*MatchHandler )(void *object1, void *object2);

 

typedef struct _Rectangle 

{

    int x;    

    int y;

    int width;

    int height;    

} Rectangle,*RectanglePtr;

 

//控件类型

typedef enum

{

    WIN_NULL=0,                // NUll

    WIN_WINDOW,                // window

    WIN_STATIC,                // static

    WIN_EDIT,                // edit

    WIN_BUTTON                // button

 

}ControlType;

 

typedef enum

{

    LEFT=0,  

    MIDDLE,

    RIGHT,   

    TOP,        

    BOTTOM  

}TextAlign;

 

typedef struct _WinBaseBufInfo

{

    //待绘内存起始地址

    unsigned char     *pdstbuf;

    unsigned int     dstpaddr;

    int             width;

    int             height;

    //一行的内存长度

      int             stride;

}WinBaseBufInfo,*WinBaseBufInfoPtr;

 

typedef struct _BaseControl

{

    Rectangle       rect;

    unsigned char   visible;

    unsigned char   enable;

    

    EventHandler       eventcallback;

    EventHandler       keyeventcallback;

    void* parent;

    void*  tag;

}BaseControl,*BaseControlPtr;

 

//链表节点

typedef struct  ControlsList

{

    ControlType contype;

    void *pcontrol;

    struct ControlsList *pnext;

    struct ControlsList *pprev;    

}ControlsList;

先介绍Utils的作用,DrawJpeg与DrawText的作用,直接望文生义,就是绘图、绘字,但里面会涉及libjpeg、点阵字库。细节先不细究。

Eventhandler的作用就是处理消息事件(触摸、按键)

Application就是程序信息

Window、Button、Edit是基础控件

为什么结构体要这么定义,在接下来具体实现中,与代码结合起来就明白了。

设计部分先到这里了,下一篇就是讲具体控件的实现。

自己动手设计并实现一个linux嵌入式UI框架(设计)的更多相关文章

  1. 自己动手设计并实现一个linux嵌入式UI框架

    一直以来都是使用现成的UI框架,如微软的window.QT等,因为它有各种控件(如button.window.edit等)都已经封装实现好了.我们只要拿来用就是了,也一直认为它很神圣,没有深入了解它背 ...

  2. 游戏UI框架设计(一) : 架构设计理论篇

    游戏UI框架设计(一) ---架构设计理论篇 前几天(2017年2月)看到一篇文章,国内王健林.马云等大咖们看好的未来十大最有"钱途"产业中,排名第一的就是"泛娱乐&qu ...

  3. 游戏UI框架设计(二) : 最简版本设计

    游戏UI框架设计(二) --最简版本设计 为降低难度决定先讲解一个最简版本,阐述UI框架的核心设计理念.这里先定义三个核心功能: 1:UI窗体的自动加载功能. 2:缓存UI窗体. 3:窗体生命周期(状 ...

  4. 游戏UI框架设计(三) : 窗体的层级管理

    游戏UI框架设计(三) ---窗体的层级管理 UI框架中UI窗体的"层级管理",最核心的问题是如何进行窗体的显示管理.窗体(预设)的显示我们前面定义了三种类型: 普通.隐藏其他.反 ...

  5. 游戏UI框架设计(四) : 模态窗体管理

    游戏UI框架设计(四) --模态窗体管理 我们在开发UI窗体时,对于"弹出窗体"往往因为需要玩家优先处理弹出小窗体,则要求玩家不能(无法)点击"父窗体",这种窗 ...

  6. 游戏UI框架设计(五): 配置管理与应用

    游戏UI框架设计(五) --配置管理与应用 在开发企业级游戏/VR/AR产品时候,我们总是希望可以总结出一些通用的技术体系,框架结构等,为简化我们的开发起到"四两拨千金"的作用.所 ...

  7. 游戏UI框架设计(7): 资源国际化技术

    游戏UI框架设计(7) --资源国际化技术 说起"资源国际化"技术,个人认为可以追述到微软Window2000 PC操作系统的发布,在这之前windows98操作系统的开发都是先由 ...

  8. 游戏UI框架设计(6): 消息传递中心

    游戏UI框架设计(6) --消息传递中心 最近一直忙于一个益智类游戏的研发工作,所以博客有段时间没有更新了.经过朋友的督促,决定这两天立刻完成最后的两篇博客讲解(UI框架).说起“消息传递中心”,或者 ...

  9. Linux设备驱动框架设计

    引子 Linux操作系统的一大优势就是支持数以万计的芯片设备,大大小小的芯片厂商工程师都在积极地向Linux kernel提交设备驱动代码.能让这个目标得以实现,这背后隐藏着一个看不见的技术优势:Li ...

随机推荐

  1. python算法之选择排序

    选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大 ...

  2. Fatal error: Class 'MongoDB\Driver\Manager' not found

    折腾了好久,总算找到了问题所在! 首先!!检查你安装的PHP拓展版本是否正确,能在在phpinfo()中看到拓展,若看不到,则安装错误! 其次,我在安装PHP扩展的时候,安装的是mongo拓展,如下图 ...

  3. Linux实战教学笔记40: Mha-Atlas-MySQL高可用方案实践(二)

    六,配置VIP漂移 主机名 IP地址(NAT) 漂移VIP 描述 mysql-db01 eth0:192.168.0.51 VIP:192.168.0.60 系统:CentOS6.5(6.x都可以) ...

  4. [转]字符集、字符编码、XML中的中文编码

    字符集.字符编码.XML中的中文编码 作为程序员的你是不是对于ASCII .UNICODE.GB2321.UTF-7.UTF-8等等不时出现在你面前的这些有着奇怪意义的词感到很讨厌呢,是不是总觉得好象 ...

  5. 第二个MFC实例:GPA计算器

    一.目的:此文通过一个GPA计算器的制作,介绍基于对话框的应用程序的编程方法.常用控件的编程技巧以及控件外观的更改技巧. 二.功能描述:所谓GPA计算器,即进行GPA换算. 功能要求由如下几点: 1. ...

  6. Struts2常量详解

    -----------------siwuxie095 Struts2 常量详解 Struts2 的常量大多在默认的配置文件中已经配置好,但根据 用户需求和开发要求的不同,可能需要修改这些常量值,修改 ...

  7. Android 重写EditText回车事件

    之前遇到的问题没来得及记录下来,趁今晚有空就重新回忆并写下了. 我们在用到EditText这个空间时经常需要重写软键盘中的回车事件以配合我们接下来的响应,比如点击回车变成搜索.发送.完成等. Edit ...

  8. 关于HDFS默认block块大小

    这是有疑惑的一个问题,因为在董西成的<Hadoop技术内幕--深入解析MapReduce架构设计与实现原理>中提到这个值是64M,而<Hadoop权威指南>中却说是128M,到 ...

  9. 15- 1 << k 时的益出

    扩展GCD-时间复杂性 题目: 计算循环语句的执行频次 for (i = A; i != B; i += C) x += 1;其中A, B, C, i都是k位无符号整数. 输入: A B C k, 其 ...

  10. 关于fastjson的一些知识

    今天被问到了一些有关fastjson的知识,问了fastjson内部的实现机制,笔者只是用过fastjson这个包,还真没了解过它的机制等. 下去后搜索了一些有关fastjson的知识,希望能对自己和 ...