




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MicroWindowsMicroWindows 体系体系结结构及构及应应用程序接口用程序接口 来源 单片机及嵌入式系统应用 作者 吴升艳 胡 冰 岳春 摘要 MicroWindows 是一个著名的开放源码的嵌入式 GUI 软件 本文简要论述了 MicroWindows 的体系结构和应用程序接口 并介绍其设备驱动特性 API 客户机 服务器 模型和画图机制 关键词 MicroWindows API Nano X 图形用户界面 许多开发者在嵌入式设计中开始使用类似于桌面的操作系统 其中一个方案就是 Linux 操 作系统 由于 Linux 在嵌入式系统上具有桌面电脑的全部功能和特性 作为一种免费的开放 源码 它允许修改和根据用户的要求进行定制 MicroWindows 是一个开放源码的嵌入式 GUI 软件 目的是把图形视窗环境引入到运行 Linux 的小型设备和平台上 作为 X Window 系统的替代品 MicroWindows 可以用更少的 RAM 和文件存储空间 100KB 600KB 提供相似的功能 允许设计得轻松加入各种显示 设备 鼠标 触摸屏和键盘等 可移植性非常好 可用 C 语言实现 支持 Intel 16 位 32 位 CPU MIPS R4000 以及基于 ARM 内核的处理器芯片 1 体系结构 1 1 分层结构设计 MicroWindows 采用分层结构设计方法 在底层提供对屏幕 鼠标 触摸屏和键盘的驱动 在程序能访问实际的硬件设备和其它用户定制设备 在中间层有一个可移植图形引擎 提供 绘制线程 区域区域填充 绘制多边形 裁减和使用颜色模式的方法 在顶层实现多种 API 以适 应不同的应用环境 目前 MicroWindows 中使用两种流行的图形编程接口 Microsoft Windows Win32 WinCE 图形显示接口 GDI 和 Xlib 接口 前者应用于所有的 Windows CE 和 Win32 应用程序 后者就像 Nano X 应用于所有 Linux X 插件集的最底层 这样可 让 Linux 图形程序员 X 接口开发图形应用程序 1 2 驱动设备 device h 文件中定义设备驱动接口 MicroWindows 已实现至少将一个屏幕 鼠标和键盘 的驱动与系统相连 独立图形设备引擎的中间层可以使驱动设备直接完成对硬件的具体操作 1 屏幕驱动 MicroWindows 可运行在支持 Framebuffer 的 32 位 Linux 系统上 也可使用 SVGALib 45 库来进行图形显示 此外 还被移植到 16 位的 ELKS 和实模式的 MSDOS 上 实现 1 2 4 8 16 和 32 位的像素支持 以及实现 VGA16 平面模式支持 它的图形引擎 能够运行在任何支持 readpixel writepixel drawhorzline drawvertline 和 setpalette 的系统之上 如果底层驱动系统实现了 Blitting 则上层可提供更多的增强功能 在底层函 数的支持之下 上层实现了对位图 字体 光标以及颜色的支持 除了基于调色板的 1 2 4 和 8 位像素模式 也实现 15 16 和 32 位像素的真彩模式 2 鼠标驱动 MicroWindows 有三个鼠标驱动程序 GPM 驱动程序 mou gpm c 支持 Linux 系统 串 口鼠标驱动程序 mou ser c 支持 Linux 和 ELKS 系统 int33 驱动程序 mou dos c 支持 MSDOS 系统 鼠标驱动程序的基本功能 是将鼠标中的数据编码 然后返回关于鼠标位置 和按键的相对或绝对数据 在 Linux 下 MicroWindows 的主循环是 SELECT 声明 如果运行的系统不支持 SELECT MicroWindows 则提供 Poll 入口 3 键盘驱动 MicroWindows 提供两个键盘驱动程序 Kbd tty c 适用于 Linux 和 ELKS 系统 键盘被 当成文件描述符来读写 Kbd bios c 用于 MSDOS 真彩模式下 它是对 PC BIOS 进行读写 来对按键进行操作 1 3 MicroGUI 独立图形设备引擎 MicroWindows 的 MicroGUI 提供了对屏幕 鼠标 键盘驱动程序和硬件之间的接口 用 户应用程序不能直接调用核心图形引擎 但是可通过 API 函数来实现 核心程序在客户机 服务器模型下常驻在服务器上 使用内部的文本字体和位图文本模式 此外 核心程序使用 的是指针 这样不用靠转变成句柄来实现更多的复杂功能 MicroWindows 中的核心程序以 GdXXX 开头 与之相连的是图形输出系统而不是窗口 管理系统 此外 还控制所有的裁剪裁剪和颜色转换功能 以下是组成 MicroWindows 核心模块 的文件 dvdraw c 核心图形程序 关于绘制线段 圆 多边形及其填充 文本和位图文件的绘 制和颜色转换 devclip c 核心裁剪裁剪程序 devrgn c 动态分配程序 devmouse c 鼠标控制程序 devkbd c 核心键盘控制程序 devpalX c 连接到系统调色板 1 4 应用程序接口 MicroWindows 提供两个应用程序接口 MicroWindows API 源代码在 win c 中 和 Nano XAPI 源代码在 nanox c 中 在 MicroWidows 上的 API 函数的基本模型都是用来初始化屏幕 键盘和鼠标的驱动程序 然后一直等待 SELECT 消息循环 当事件发生时 这条信息将送到用户程序 如果是用 户请求图形操作 那参数将被编码后送到适当的 GdXXX 核心程序上 与原始图形操作相对 的窗口概念是被该层所控制的 也就是说该层的 API 函数定义了窗口及其对应系统的概念 这样 系统坐标就能被转成屏幕上显示的坐标 并且可将数据传给 GdXXX 核心程序 由其 作实际操作 该层亦定义图形 显示文件 并且会将此信息包括裁减信息送到核心程序上 MicroWindows API 支持大多数图形绘制 裁减 窗口工具条绘制以及拖拉窗口等这些程 序 Nano x API 以 mini X 服务器基础 类似于 X 的一个 API 沿用 X Window 中的 Xlib API 命名都是 GrXXX 而不是 X Windows 中的 X Nano x API 加入了基于网络的客户 机 服务器功能 但是没有实现窗口管理 所以对窗口的处理需要使用系统提供的一个插件 widget 集 或者完全由应用程序员自已开发 2 图形引擎特性与实现 图形引擎层的功能是完成图形在实虚屏之间的转换 以 Gd 为开头 并将指针传给 PSD 作为它的首个参数 PSD 参数将指定底层的显示模式 例如设备的垂直和水平尺寸 硬件使 用的颜色模式 另外 真正执行画图的程序在这一层中作为功能指针使用 所有屏幕坐标都 是 COORD 类型 颜色在图形引擎中被指定 RGB CILORVAL 模式 然后被转换成颜色指针 以 PIXELVAL 模式传给显示硬件 在 32bpp bit per pixel 真彩显示器环境下不必转换 1 区域区域 区域区域用来描述屏幕上像素点的分布 在 MicroWindows 中 区域区域是用一些无交迭的矩形组 成的数组来描述的 目前实现区域区域有两种方法 最初是用一个静态数组 CLIPRECTs 来描述 复杂区域区域 在这个数组中任一矩形中的点都被认为是存在这个区域区域中的 另一个全局变量 clipcount 用来给这个数组中的矩形计数 这个方法没有给区域区域管理提供入口点 所以整个数 组的数据直接被送到负责裁剪裁剪功能的函数数口 新方法则可以创建任何数目的区域区域 用来描 述区域区域的数组 CLIPREGION 被定义成动态数据组 可动态分配它所包含矩形的数量 这样 那些无交迭的矩形被存放在 y x 类型的队列中 在同一队列中 所有矩形的垂直高度 y 是一 样的 这意味着在每个队列中只有矩形的宽度可变 实际程序是利用 Intersection Union Subtraction Exclusive OR 等方法来实现创建 删除一个区域区域或者 是将几个区域区域或矩形合并 以下是这种方法设计的几个函数 GdAllocRegion 创建一个区域区域 GdDestroyRegion 删除一个区域区域 GdCopyRegion 复制区域区域 GdUnionRectWithRegion 将一个矩形和一个区域区域合并 GdIntersectRegion 在两个区域区域的交集处创建一个新区域区域 GdSubtractRegion 在两个区域区域的差集处创建一个新区域区域 GdUnionRegion 在两个区域区域的并集创建一个新区域区域 GdXorRegion 2 裁剪裁剪 图形引擎中有一个由图形操作定义的由一些矩形组成的裁剪裁剪区 如果点被包含在这些裁减 区内就会被绘制出来 有两个裁剪裁剪算法 devclipl c 针对静态矩形数组 devclipc2 c 针对新 的动态数组 GdSetClipRects 是唯一删除区域区域并指定后来的图形操作的入口点 所有的绘 图程序都要调用两个附加程序来决定是否画图 GdClipPoint 获取屏幕坐标的 x y 点 如 果该点被绘制出来的话 则返回 TRUE GdClipArea 获取屏幕上方最左的或者下方最右的 点并回以下值 CLIP VISIBLE 指定区域区域在原区域区域内 CLIP INVISIBLE 指定区域区域不 在原区域区域内 CLIP PARTIAL 指定区域区域部分在原区域区域内 3 画线 MicroWindows 使用 GdPoint 画点 GdLine 画线 画线时使用当前的前景色 DgSetForeground 指定 有两种绘制模式 MODE SET 和 MODE COR 4 矩形 圆和椭圆以及多边形 矩形 圆和椭圆的绘制分别调用 GdRect 和 GdEllipse 来实现 MicroWindows 中定义了 一个包含 x y 多边形顶点的数组来表示多边形 调用 GdLine 函数画线 把这些点相连就 可以实现画多边形 绘制时使用前景色 5 区域区域填充 MicroWindows 中使用 GdFillRect 函数填充矩形区域区域 填充使用前景色 填充圆和椭圆 使用 GdFillEillpse 函数 填充多边形使用 GdFillPoly 函数 填充的实现是在屏幕驱动中不 断地调用 GrawHorzLine 函数 6 字体和文本输出 MicroWindows 支持可变 不可变字体 文本输出时使用 GdSetFont 定义输出使用的字体 再调用 GdText 函数输出 7 颜色模式和调色板 MicroWindows 支持 RGB 颜色 颜色匹配 真彩和调色板显示 3D 效果的显示 8 图片绘制 MicroWindows 支持两种格式的图片 单色图片用 IMAGEBITS 结构 1 表示前景色 0 表示背景色 来定义 绘制时调用 GdBitmap 程序 彩色图片可以分别定义为 1 4 8 bpp 的模式 用 IMAGEHDR 结构来表示 绘制时调用 GdDrawImage 函数 9 映射 映射功能在实虚屏的转换中使用 GdBlit 可以实现上层的 API 将虚拟内存存复制到显示 屏上 复制时调用 GdBlit 函数 3 MicroWindows API MicroWindows API 中的基本通信机制是消息机制 一个消息机制中包含了 message NUMBER 和两个参数 wParam lParam Message 被存放在应用程序的 message queue 中 GetMessage 函数将其取出 WM GHAR 针对键盘输入 WM LBUTTONDOWN 针对鼠标键被按下 窗口创建时使用 WMCREATE 删除时使用 WM DESTROY DispatchMessage 将消息传到处理程序的窗口 以下是处理消息的有关函数 SendMessage 将消息传到窗口 PostMessage 将消息传到消息队列 PostQuitMessage 传递 WM QUIT 消息到消息队列读时中断程序 GetMessage 得到消息后结束中断 TranslateMessage 将按键按下 弹起的消息传到 WMCAR DispatchMessage 将消息传到为它分配的窗口程序 3 2 窗口的创建和删除 RegisterClass 定义新的窗口类型并启动窗口程序 UnRegisterClass 删除窗口类型 CreateWindowsEx 按窗口类型创建一个窗口 DeatroyWindow 删除一个窗口 窗口创建后产生 WM CREATE 消息 删除产生 WM DESTROY 消息 3 3 窗口的显示 隐藏和移动 ShowWindow 函数指定窗口是否可见 MoveWindow 改变窗口的位置和大小 窗口位置 改变时 产生 WM MOVE 消息 窗口大小改变时 产生 WM SIZE 消息 3 4 窗口的绘制 窗口绘制时产生 WM PAINT 消息 窗口的标题栏自动绘制 设置属性使用 SetWinowText 察看属性使用 GetWindowText 1 实虚屏切换 窗口绘制使用的坐标系统是屏幕上的绝对坐标系 MicroWindows API 使用的是相对坐标 系 GetClientRect 和 GetWindowRect 函数各自返回虚屏和实屏的坐标值 2 DEVICE Contexts 调用图形 API 之间要包含 device context 它指定系统所使用的窗口和坐标系 同时还定 义系统默认的前景色和背景色 GetDC 用来包含 device context 在画标题栏还需调用 GetWindowDC GetDCEx 定义 子 兄弟窗口的裁剪裁剪操作 绘制结束时调用 ReleaseDC 释放 DC 3 图形 API 见网络补充版 3 5 其它实用函数 WndSetDesktopWallpaper 设置桌面的背景图片 WndSetCursor 为窗口创建光标 WndRaiseWindow 拉伸窗口 WndLowerWindow 缩小窗口 WndGetTopWindow 返回最上层窗口的句柄 Sleep 睡眠 1 设置窗口中心 WM SETFOCUS 和 WMKILLFOCUS 分别用于获取 删除中心 GetActiveWindow 返 回 ancestor 窗口 GetDesktopWINDOW 返回当前桌面窗口的句柄 2 鼠标捕获 WM MOUSEMOVE 用来表示鼠标被移动 SetCapture 获取全部的鼠标移动信息 ReleaseCapture 返回到程序 GetCaptru
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合同拟制方案么(3篇)
- 2025年商业写字楼智能化改造初步设计策略研究报告
- 金融科技企业估值模型与投资决策在金融科技生态构建中的应用2025年研究报告
- 村里果园合同承包协议书
- 生猪收购代销协议书范本
- 股东对外担保协议书模板
- 沿海拖船转让协议书范本
- 长宁区打印机租赁协议书
- 自驾旅行搭伴协议书范本
- 终止试用期合同解除协议
- 寺院安全管理台账范本
- 【高中语文】《老子》四章+教案+统编版高中语文选择性必修上册
- 《上帝掷骰子吗:量子物理史话》导读学习通超星课后章节答案期末考试题库2023年
- 百问百答精编手册
- 人教版(新起点)小学六年级上册英语教案(全册)
- 上海永大日立电梯按键的使用方法
- 注射用卡络磺钠销售培训学习资料
- WB/T 1069-2017乘用车运输服务通用规范
- MT 314-1992煤矿假顶用菱形金属网
- GB/T 28708-2012管道工程用无缝及焊接钢管尺寸选用规定
- 医师执业注册变更聘用证明
评论
0/150
提交评论