看了“自己动手设计并实现一个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. GeoServer之图层的新建与发布

    GeoServer之图层的新建与发布 GeoServer的图层发布并不复杂,在经过: 1.创建工作区 2.添加新的数据存储 3.编写styles 后:我们就可以很简单的创建图层了. 1.在新建图层中选 ...

  2. c++builder 解压缩

    c++builder  解压缩  TZCompressionStream  TZDecompressionStream #include <System.ZLib.hpp> void __ ...

  3. Mysql 性能优化 ( my.cnf )

    简介: Mysql 参数优化 一.Mysql 源码编译参数 shell > yum -y install gcc gcc-c++ make cmake ncurses-devel zlib-de ...

  4. ios笔试题

    最近找工作,有面试有笔试部分,故把笔试题自己整理了下. 面试能力要求:精通iphone的UI开发,能熟练操作复杂表视图,熟练使用图层技术, 可以自定义UI控件,使用类别扩展系统控件功能;   擅长通讯 ...

  5. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 15—Anomaly Detection异常检测

    Lecture 15 Anomaly Detection 异常检测 15.1 异常检测问题的动机 Problem Motivation 异常检测(Anomaly detection)问题是机器学习算法 ...

  6. 清除html中的标记,只留下文字

    /// <summary>/// 清除html中的标记,只留下文字./// </summary>/// <param name="HTML">& ...

  7. Linux实战教学笔记34:企业级监控Nagios实践(上)

    一,Nagios监控简介 生活中大家应该对监控已司空见惯了,例如:餐馆门前的监控探头,小区里的视频监控,城市道路告诉监控探头等,这些监控的目的大家都很清楚,无须多说.那么,企业工作中为什么要部署监控系 ...

  8. 10 华电内部文档搜索系统 search05

    上一节讲述了索引更新的处理方案,这一节首先讲述索引维护的相关方案.每创建一个索引,把文档相关的信息插入到数据库中.这个时候会产生一个唯一的对应的ID,获取这个ID之后,把这个ID又插入到对应的索引文件 ...

  9. http协议简析(一)

    HTTP:hype-text transfer protocol,超文本传输协议,超文本(html)在网络间(电脑与电脑之间)传输过程中所遵循的一些规则. 两台电脑之间要实现数据传输的条件 1.两台电 ...

  10. 基于HTML5的RDP访问实战

    基于HTML5的RDP访问实战 1.安装guacamole   2.下载源码   3.安装服务端 安装报错 错误   参考 http://www.remotespark.com/html5.html ...