请选择 进入手机版 | 继续访问电脑版

雨林木风

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13|回复: 0

嵌入式Linux下的图形用户界面系统设计

[复制链接]

8499

主题

8506

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26041
发表于 2020-12-24 21:49:38 | 显示全部楼层 |阅读模式
  有四大构成部门:输入空洞层、显示空洞层、事变体系和窗口体系。其特征是界面体面、占用资源少、运转结果高,现已运用于嵌入式视频监控项目。实习证实其计划思绪可行,机能优秀,合用于楷模的嵌入式体系项目。
  嵌入式图形用户界面(GUI, Graphic UserInterface)体系行为嵌入式体系中的一大抵害身手,为用户供应筑立的限度接口,其机能的瑕瑜,界面的体面水准,影响着用户对产物的置备意图和操纵感触。
  方今嵌入式体系中GUI的完毕式样紧要有两种:一是采用现有的GUI库;第二种是开拓商基于嵌入式操作体系计划特有的GUI体系。采用第1种式样寻常要对通用GUI库举办剪裁和性子化定制,也往往要支拨卓殊的本钱来得回软件授权。相对而言,第2种形式完毕的GUI占用资源较小、容易餍足嵌入式体系的及时性和性子化需求。
  本文采用第2种式样,正在嵌入式Linux下操纵C讲话完毕了一个界面体面、轻量级、占用资源少、履行结果高的图形用户界面体系SKY-GUI.本文的机合如下:第1部门先容SKY-GUI的根基机合;第2部门给出整体的模块计划;第3部门给出原来习和测试结果;末了总结。
  (3)扶植窗口和控件对象体系,结构好各个空洞模块的相合,处置各样GUI事变。
  (4)将GUI对象通过具格式样显示正在屏幕上,通过动画将体系的状况变革浮现给用户。
  它紧要由输入空洞层、显示空洞层、事变体系和窗口体系四大部门构成。输入空洞层统治一切的输入筑立,将用户的操作转化成音信送入事变体系。
  显示空洞层操作显示筑立,供应给窗口体系绘画、贴图、显示字体接口。事变体系为窗口体系供应音信获取、存储和处置的机制。窗口体系是SKY-GUI的焦点,界说了各样控件和窗口,描绘它们之间的逻辑相合和音信轮回相合。下面将别离对这四大构成部门的计划举办先容。
  输入空洞层开始对GUI所需的各样输入筑立初始化,然后守候各个筑立的输入。当接到筑立输入,就把用户对筑立的操作翻译成音信,送至事变体系最底层音信队伍(正在异2. 3. 2细致磋商)中。
  筑立输入的翻译进程遵照整体的输入筑立而定。关于键盘,只须将其键值和该键的状况封成音信。关于鼠标,除了要记实其按键状况,还要遵照鼠标方今的名望和屏幕的巨细将输入的位移分量转化成鼠标的新名望封入音信。
  显示空洞层的影响是为窗口体系供应显示接口函数,蕴涵根基图形接口(画点、画线、填充矩形、区域拷贝、Alpha混杂等)、贴图接口和字体接口三大性能,其机合如图3所示。
  显示空洞层正在嵌入式Linux下的基本筑立为帧缓冲,对其按坐标写入或读出颜色值即可完毕根基的图形接口的性能。
  简陋的贴图性能用根基图形接口加bmp形式的文献(图片不经由压缩,其颜色分量按坐标秩序存储)就能够完毕。为了让界面愈加体面,SKY-GUI移植了开源的jpeg库和png库来解压相应形式的压缩图片文献,完毕了对这两种图片形式的扶助。
  对字体的扶助当然必弗成少。点阵字体把字体的位图按12伊12、16伊16等形式存入二进制文献,能够比力容易地完毕字体接口,但字体不行随便放大缩小,且放大后字体有光鲜的锯齿。矢量字体用数学方程加字形上的要害点来描绘字体,能够举办无级缩放,为界面的绘制带来极大的聪明性。SKY-GUI移植了开源的Freetype库,用其寻址矢量字体文献并天生字体位图,完毕了对矢量字体的扶助。
  事变体系为SKY-GUI的其他三大部门供应音信发送、存储、获取和处置的性能。其焦点为音信、音信队伍和音信处置函数。
  hWnd为指向窗口的指针,注解此音信必要发给哪个窗口。event为事变编号,用区别的整数代外区别的事变。wParam和lParam为事变的附加参数,它们的寓意遵照事变类型的区别而定,比如,正在鼠标音信中这两个参数就代外光标正在屏幕上的坐标名望。
  音信队伍是事变体系中的音信的暂存处,它由一个环形先入先出机合的音信数组和一个音信链外构成。音信数组的空间是固定的,一朝被写满,自后的音信只好被抛弃;而音信链外则能够动态扩充巨细。正在SKY-GUI中,音信数组紧要用来存放底层输入筑立的事变(如鼠标、键盘、时钟等等),而音信链外紧要用来存放优先级更高且弗成抛弃的上层事变(窗口事变和显示事变)。
  SKY-GUI界说了三类音信操作接口:音信发送函数、音信获取函数和事变处置函数。
  音信发送函数为输入空洞层和窗口体系供应音信发送接口,蕴涵Post_Msg函数和Send_Msg函数,其影响都是向音信队伍发送音信,区别之处正在于Post_Msg发送的音信存入音信队伍的数组之中,而Send_Msg发送的音信则存入链外之中。
  音信获取函数为Get_Msg函数,它为窗供词应获得音信的接口。具有独立线会描绘其机合)移用它从音信队伍中获得一个音信,个中存正在链外中的音信更为紧急,优先取出。
  事变处置函数是窗口处置音信事变的函数接口,正在SKY-GUI中,具有独立线程的窗口移用Dispatch_Msg函数来完毕对我方音信处置函数的移用。
  Dispatch_Msg只是事变处置的移用接口,窗口收到音信后所选取的整体程序是由音信处置函数决心的,其界说为:
  每一个窗口都有一个函数指针指向我方的音信处置函数,其性能遵照区别的窗口有所区别,但总体机合是相似的,如图4所示。
  其实质上是一个音信处置的分类列外。当窗口移用音信处置函数时,其遵照音信类型的区别别离移用底层输入音信、控件音信或显示音信的处置函数,然后再遵照整体的音信事变移用相应的处置函数,完毕对各样事变的呼应。
  窗口体系为SKY-GUI体系的焦点,它庇护了一个完善的窗口列外,界说了窗口体系和事变体系之间的相合,并制订了窗口之间的音信通报机制。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

|appname
快速回复 返回顶部 返回列表