OPEN第5章MiniGUI程序设计.ppt
《OPEN第5章MiniGUI程序设计.ppt》由会员分享,可在线阅读,更多相关《OPEN第5章MiniGUI程序设计.ppt(144页珍藏版)》请在三一办公上搜索。
1、目 录,1.第一章 嵌入式系统基本概念2.第二章 Linux基础 5.第三章 嵌入式交叉编译环境5.第四章 嵌入式开发环境的搭建5.第五章 MiniGUI程序设计6.第六章 嵌入式数据库,第5章 嵌入式开发环境的搭建,嵌入式GUI概述MiniGUI DEMOMiniGUI的编译和安装MiniGUI程序框架MiniGUI编程基础,GUI(Graphics User Interface),图形用户界面,借助菜单、按钮等标准界面元素和鼠标进行操作,帮助用户方便地向计算机系统发出指令,并将系统运行的结果同样以图形方式显示给用户。嵌入式GUI:轻型、占用资源少、高性能、高可靠性、可配置,5.1嵌入式GU
2、I概述,5.2 常用嵌入式GUI介绍,MicroWindowsMiniGUI其他图形平台:Qt/Embedded等,5.3 MiniGUI概述,MiniGUI(http:/)原是由魏永明主持和开发的一个自由软件项目,现由北京飞漫软件技术有限公司维护并开展后续开发。遵循GPL 条款支持操作系统Linux、uClinux、VxWorks、eCos、uC/OS-II、pSOS、ThreadX 等MiniGUI 为应用程序定义了一组轻量级的窗口和图形设备接口。,手机/PDA,MiniGUI 典型应用,数字媒体/机顶盒,MiniGUI 典型应用,工控仪表,MiniGUI 典型应用,其他,MiniGUI
3、典型应用,miniGUI系统架构,程序架构分析:,结构体初始化,创建窗口,显示窗口,消息循环,清理资源,MSG_CREATE,MSG_PAINT,MSG_CLOSE,消息处理函数,本机执行环境,内核:2.6.22桌面:KDE底层图形接口:framebuffer调试接口qvfb 1.0miniGUI版本 1.6,2.Hello miniGUI,DEMO,1)头文件(前四个为必须)#include#include#include#include#include common.h 包括 MiniGUI常用的宏及数据类型的定义。minigui.h 包含了全局的和通用的接口函数以及某些杂项函数的定义。g
4、di.h包含了绘图函数的接口的定义。window.h 包含了窗口有关的宏、数据类型、数据结构的定义以及函数接口声明。control.h 包含了 所有内建控件的接口定义。,程序架构分析:,2)MiniGUI程序入口点 int MiniGUIMain(int argc,const char*argv)函数原形:int MiniGUIMain(int argc,const char*argv)参数argc 和argv 与C 程序main 函数的参数argc 和argv 的含义是一样的,分别为命令行参数个数和参数字符串数组指针。main 函数已经在 MiniGUI的函数库中定义了,该函数在进行一些 M
5、iniGUI的初始化工作之后调用 MiniGUIMain函数。,程序架构分析:,3)设置主窗口属性 MAINWINCREATE 结构描述/窗口信息 CreateInfo.dwStyle=WS_VISIBLE|WS_BORDER|WS_CAPTION;/风格 CreateInfo.dwExStyle=WS_EX_NONE;CreateInfo.spCaption=Hello,world!;/标题名 CreateInfo.hMenu=0;/无菜单 CreateInfo.hCursor=GetSystemCursor(0);CreateInfo.hIcon=0;CreateInfo.MainWind
6、owProc=HelloWinProc;/消息处理过程函数 CreateInfo.lx=0;CreateInfo.ty=0;CreateInfo.rx=320;CreateInfo.by=240;CreateInfo.iBkColor=COLOR_lightwhite;CreateInfo.dwAddData=0;CreateInfo.hHosting=HWND_DESKTOP;/托管窗口,程序架构分析:,3)设置主窗口属性 MAINWINCREATE 结构描述CreateInfo.dwStyle=WS_VISIBLE|WS_BORDER|WS_CAPTION;设置主窗口风格,这里把窗口设为初
7、始可见的,并具有边框和标题栏。CreateInfo.deExStyle=WS_EX_NONE;设置主窗口的扩展风格,该窗口没有扩展风格。CreateInfo.spCaption=“HelloWorld”设置主窗口的标题为”HelloWorld”。,程序架构分析:,3)设置主窗口属性 MAINWINCREATE 结构描述CreateInfo.hMenu=0;设置主窗口的主菜单,该窗口没有主菜单。CreateInfo.hCursor=GetSystemCursor(0);设置主窗口的光标为系统缺省光标。CreateInfo.hIcon=0;设置主窗口的图标,该窗口没有图标。,程序架构分析:,3)设
8、置主窗口属性 MAINWINCREATE 结构描述CreateInfo.iBkColor=PIXEL_lightwhite;设置主窗口的背景色为白色,PIXEL_lightwhite 是 MiniGUI预定义的象素值。CreateInfo.dwAddData=0;设置主窗口的附加数据,该窗口没有附加数据。CreateInfo.hHosting=HWND_DESKTOP;设置主窗口的托管窗口为桌面窗口。,程序架构分析:,3)设置主窗口属性 MAINWINCREATE 结构描述CreateInfo.MainWindowProc=HelloWinProc;设置主窗口的窗口过程函数为 HelloWin
9、Proc,所有发往该窗口的消息由该函数处理。CreateInfo.lx=0;CreateInfo.ty=0;CreateInfo.rx=320;CreaetInfo.by=240;设置主窗口在屏幕上的位置,该窗口左上角位于(0,0),右下角位于(320,240)。,程序架构分析:,4)创建和显示主窗口/创建主窗口 hMainWnd=CreateMainWindow(显示窗口在屏幕上。,程序架构分析:,5)进入消息循环 MiniGUI 对 MiniGUI程序维护一种名叫消息队列的数据结构。在发生事件之后,MiniGUI 将事件转换为一个消息,并将消息放入目标程序的消息队列之中。应用程序现在的任务
10、就是执行消息循环代码,不断地从消息队列中取出消息,进行处理。/消息循环 while(GetMessage(,程序架构分析:,6)窗口过程函数 static int HelloWinProc(HWND hWnd,int message,WPARAM wParam,LPARAM lParam)HDC hdc;RECT rc;char msg_text30;switch(message)/创建时发送的消息,用来做初始化处理,这里是初始化字符串内容 case MSG_CREATE:break;/窗口绘画时发送的消息,用来在界面绘图或者输出文字/注意这里的return 0 表明不需要进入默认处理函数中。
11、case MSG_PAINT:printf(BeginPaint.n);hdc=BeginPaint(hWnd);TextOut(hdc,10,50,Hello,world!);EndPaint(hWnd,hdc);printf(EndPaint.n);return 0;/结束时一些处理函数,主要是销毁主窗口和发送quit消息以退出消息循环。case MSG_CLOSE:DestroyMainWindow(hWnd);PostQuitMessage(hWnd);return 0;return DefaultMainWinProc(hWnd,message,wParam,lParam);,程序架
12、构分析:,6)窗口过程函数 在 helloworld.c程序中,窗口过程是HelloWinProc。CreateMainWindow 函数根据 MAINWINCREATE 结构类型的参数中指定的窗口过程创建主窗口。窗口过程函数由 MiniGUI进行调用。窗口过程函数不予处理的消息应该传给 DefaultMainWinProc 函数进行缺省处理。,程序架构分析:,SendMessageMSG_CREATE,CREATEMAINWINDOW,MSG_PAINT,hWnd,SHOWWINDOW,PostMessageMSG_PAINT,GetMessage,WndProc,主窗口创建时消息动作过程:
13、,程序架构分析:,MSG_CLOSE,hWnd,MSG_Derstroy,hWnd,GetMessage,WndProc,底层事件响应用户单击关闭按钮,DestroyMainWindowPostQuitWindow,hWnd,MSG_QUIT,QUIT退出,主窗口销毁时消息动作过程:,程序架构分析:,7)屏幕输出MSG_PAINT消息-进行屏幕输出。case MSG_PAINT:hdc=BeginPaint(hWnd);TextOut(hdc,60,60,Hello world!);EndPaint(hWnd,hdc);return 0;,程序架构分析:,8)程序的退出 单击窗口右上角关闭按钮
14、,发送 MSG_CLOSE 消息。case MSG_CLOSE:DestroyMainWindow(hWnd);PostQuitMessage(hWnd);return 0;,程序架构分析:,9)程序编译MiniGUI-Threads 模式:$gcc o helloworld helloworld.c lpthread lminiguipthread 线程库minigui minigui支持库,程序架构分析:,10)程序执行./helloworld,程序架构分析:,MiniGUI函数库组成,libminigui:核心库,标准控件libmgext:扩展库,一些有用的控件 libvcongui:虚
15、拟控制台窗口,MiniGUI运行模式,MiniGUI-ThreadsMiniGUI-LiteMiniGUI-Standalone注意:以下讲述基于MiniGUI1.6;MiniGUI 2.0.x 中Lite模式升级为Processes 模式。默认模式是MiniGUI-Threads。,1)提供了完备的多窗口机制和消息传递机制。2)提供常用的控件类。3)对话框和消息框支持。4)其它 GUI 元素,包括菜单、加速键、插入符、定时器等。5)界面皮肤支持。,MiniGUI V1.6.x 的主要特征(1/4):,6)支持低端显示设备(比如单色 LCD)和高端显示设备(比如彩色显示器。7)Windows
16、的资源文件支持,如位图、图标、光标等。8)各种流行图像文件的支持。9)多字符集和多字体支持。10)多种键盘布局的支持。,MiniGUI V1.6.x 的主要特征(2/4):,11)汉字(GB2312)输入法支持。12)针对嵌入式系统的特殊支持,包括一般性的 I/O 流操作,字节序相关函数等。13)层的支持。(MiniGUI-Lite 版本)。14)提供快速和增强的位块操作,视频加速支持以及 Alpha 混合等功能。,MiniGUI V1.6.x 的主要特征(3/4):,15)增强的新 GDI 函数。16)图形抽象层(GAL)以及输入抽象层(IAL)。,MiniGUI V1.6.x 的主要特征(
17、4/4):,轻型、占用资源少 高性能 高可靠性 可伸缩性强 跨操作系统支持 可配置,MiniGUI 优势:,MiniGUI编程指南 V1.6 MiniGUI API Reference Manual V1.6 其他资源http:/http:/,MiniGUI 参考手册:,5.4 MiniGUI编译安装,北京飞漫软件技术有限公司 MiniGUI 免费版,获取MiniGUI:,libminigui-1.6.x.tar.gz:MiniGUI 函数库源代码,其中包括libminigui、libmgext 和 libvcongui。minigui-res-1.6.tar.gz:MiniGUI 所使用的资
18、源,包括基本字体、图标、位图和鼠标光标。mde-1.6.x.tar.gz:MiniGUI 的综合演示程序。mg-smaples-1.6.x.tar.gz:MiniGUI 编程指南的配套示例程序。,源代码及资源包,基于VESA FrameBuffer的图形引擎。支持 FrameBuffer的Linux内核相关选项:,MiniGUI图形引擎,修改/boot/grub/menu.lst 文件,kernel 打头的一行添加 vga=0 x03171024*768*16bpp必须重新启动才能生效Linux 引导时,会在屏幕的左上方显示一个可爱的小企鹅或者发行版厂商的 LOGO 图片,FrameBuffe
19、r,vga=0 x0317,FrameBuffer:,分辨率:,FrameBuffer分辨率:,libminigui-1.6.0-linux.tar.bz2软件包/usr/local/lib$tar xjvf libminigui-1.6.0-linux.tar.bz2$cd libminigui-1.6.0-linux$mv libminigui-1.6.0-linux libminigui-1.6.0-linux-host$./configure$make$make install,本地安装库,修改/etc/ld.so.conf 文件 共享库搜索目录/usr/lib/usr/X11R6/l
20、ib/usr/i486-linux-libc5/lib/usr/local/lib 运行ldconfig 命令刷新系统的共享库搜索缓存:$su-c/sbin/ldconfig,本地安装更新库搜索路径:,安装 MiniGUI 的资源res.tar.bz2软件包:图标、光标等$tar jxvf res-host.tar.bz2$cd res$make install默认的安装脚本会把 MiniGUI 资源文件安装到/usr/local/lib/minigui/res/目录下。,本地安装资源:,编译应用程序例子sample.tar.bz2$tar jxvf mg-sample-1.6.0.tar.b
21、z2$mv mg-sample-1.6.0 mg-sample-1.6.0-host$cd mg-sample-1.6.0-host$./configure$make,本地安装代码编译:,PC 上MiniGUI 的运行注意:必须要在控制台模式才能运行MiniGUI。要启动控制台,按住CtrlAlt 的同时,按F1F6 中的任意一个均可,然后登录系统,进入mg-sample-1.6.0-host/src 目录,直接运行即可(./helloworld)。按住CtrlAlt 的同时,按7 可返回,本地运行:,交叉编译libminigui$tar jxvf libminigui-1.6.0-linux
22、.tar.bz2$cd libminigui-1.6.0-linux-target$./build/buildlib-uparm2410-TFT$make$make install(make需要持续几分钟)默认的安装脚本会把 库文件安装到/opt/host/armv4l/armv4l-unknown/linux/lib/目录下,交叉安装库:,安装 MiniGUI 的资源res.tar.bz2软件包:图标、光标等$tar jxvf res-target.tar.bz2$cd res-target$make install默认的安装脚本会把 MiniGUI 资源文件安装到/opt/host/arm
23、v4l/armv4l-unknown/linux/lib/minigui/res/目录下,交叉安装资源:,编译应用程序例子 mg-sample-1.6.0.tar.bz2$tar jxvf mg-sample-1.6.0.tar.bz2,$mv mg-sample-1.6.0 mg-sample-1.6.0-target$mg-sample-1.6.0$./build-upnet2410-4000$make,交叉安装代码编译:,将应用程序拷贝到/arm2410/目录下minicom通讯终端,连接好开发板和主机,打开电源mount t nfs 192.168.0.xx:/arm2410/host
24、 ln s/dev/fb/0/dev/fb0 建立符号连接 mknod/dev/tty0 c 4 0 建立/dev/tty0 设备执行MiniGUI 应用程序,在目标板上运行:,5.5 MiniGUI程序架构,分析 MiniGUI应用程序 helloworld 源代码在src目录下 helloworld 程序运行结果,5.6 MiniGUI编程基础,本节内容MiniGUI窗口MiniGUI消息及消息队列MiniGUI对话框MiniGUI菜单MiniGUI基本控件按钮静态框编辑框,窗口,窗口是屏幕上的一个矩形区域。应用程序的可视部分由一个或多个窗口构成。窗口系统控制窗口的位置、大小、和可见区域。
25、一个应用程序窗口一般包括如下部分:一个可视的边界一个窗口ID,客户程序使用该ID操作窗口,“窗口句柄”一些其它特性:高、宽、背景色等可能有菜单和滚动条等附加窗口元素,窗口,屏幕上的重叠窗口通常具有如下的关系:窗口一般组织为层次体系结构的形式(或者说,树的形式)。根窗口(root window)是所有窗口的祖先,占满整个屏幕的表面,也称为桌面窗口。除了根窗口以外的所有窗口都有父窗口,每一个窗口都可能有子窗口、兄弟窗口、祖先窗口和子孙窗口等子窗口含在父窗口内,同一个父窗口内的子窗口为同级窗口。窗口有从属关系,也就是说,某些窗口的生命周期和可见性由它的所有者决定。父窗口通常拥有它们的子窗口。,Des
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OPEN MiniGUI 程序设计
链接地址:https://www.31ppt.com/p-6513275.html