zoukankan      html  css  js  c++  java
  • 自己动手设计并实现一个linux嵌入式UI框架(设计)

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

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

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

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

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

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

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

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

    image

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

    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是基础控件

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

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

  • 相关阅读:
    mass Framework spec模块 v2
    素数判断算法(高效率)
    修改Win7远程桌面端口【适用XP/2003】
    一步一步写算法(之hash表)
    DropdownList绑定的两种方法
    JDK1.5官方下载_JDK5官方下载_JDK1.5API(chm)下载_JDK5APICHM中文参考下载_JDK1.5下载_JDK5下载
    HTTPS 方式访问网站
    薏米红豆粥功效及做法介绍
    教你用笔记本破解无线路由器密码
    HTTPS那些事(一)HTTPS原理
  • 原文地址:https://www.cnblogs.com/ITBread/p/4424484.html
Copyright © 2011-2022 走看看