嵌入式Linux开发教程12(MiniGUI图形课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《嵌入式Linux开发教程12(MiniGUI图形课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 Linux 开发 教程 12 MiniGUI 图形 课件
- 资源描述:
-
1、第12章 MiniGUI图形界面设计1-2课程安排课程安排12.1 Minigui概述概述12.2 Minigui的安装和使用的安装和使用12.3 利用利用Eclipse编写编写MiniGUI程序程序12.4 MiniGUI的编程基础的编程基础12.5 消息循环和窗口过程消息循环和窗口过程12.6 对话框和控件编程对话框和控件编程12.7 图形设备接口图形设备接口12.8 实例实例-MiniQQ界面设计界面设计12.9 小结小结1-312.1 MiniGUI概述概述MiniGUI最初是为了满足一个工业控制系统的需求而设计和开发最初是为了满足一个工业控制系统的需求而设计和开发的。这个工业控制系统
2、是清华大学为一台数控机床设计的计算机的。这个工业控制系统是清华大学为一台数控机床设计的计算机数控系统(数控系统(CNC)。在比较了)。在比较了DOS、Windows 98、Windows NT、Linux等系统之后,该项目组决定选择等系统之后,该项目组决定选择RT-Linux作为实时作为实时操作系统,以便满足操作系统,以便满足2ms甚至更高的实时性。但是图形用户界面甚至更高的实时性。但是图形用户界面是一个问题,因为是一个问题,因为X Window不适合于实时控制系统,并且当时不适合于实时控制系统,并且当时X Window系统的本地化也不尽人意。因此,项目组决定自己开系统的本地化也不尽人意。因此
3、,项目组决定自己开发一套图形用户界面支持系统发一套图形用户界面支持系统。1-412.1.1 MiniGUI的特点的特点显然,显然,MiniGUI一开始就针对实时系统而设计,在设计之初就考一开始就针对实时系统而设计,在设计之初就考虑到了小巧、高性能和高效率。因此,虑到了小巧、高性能和高效率。因此,MiniGUI是一个非常适合是一个非常适合于工业控制实时系统以及嵌入式系统的可定制的、小巧的图形用于工业控制实时系统以及嵌入式系统的可定制的、小巧的图形用户界面支持系统户界面支持系统。它的主要特色有它的主要特色有:1-512.1.2 MiniGUI运行模式运行模式和和Linux这样的类这样的类UNIX操
4、作系统相比,一般意义上的嵌入式操作操作系统相比,一般意义上的嵌入式操作系统具有一些特殊性。举例而言,诸如系统具有一些特殊性。举例而言,诸如uClinux、uC/OS-II、eCos、VxWorks等操作系统,通常运行在没有等操作系统,通常运行在没有MMU(内存管理(内存管理单元,用于提供虚拟内存支持)的单元,用于提供虚拟内存支持)的CPU上。这时,往往就没有进上。这时,往往就没有进程的概念,而只有线程或者任务的概念,这样,程的概念,而只有线程或者任务的概念,这样,GUI系统的运行系统的运行环境也就大相径庭。因此,为了适合不同的操作系统环境,可将环境也就大相径庭。因此,为了适合不同的操作系统环境
5、,可将MiniGUI配置成三种运行模式配置成三种运行模式:MiniGUI-Threads。MiniGUI-Processes。MiniGUI-Standalone。1-612.2 MiniGUI的安装和使用的安装和使用现有的资料主要介绍了现有的资料主要介绍了MiniGUI在在RedHat9.0下的安装和配置,下的安装和配置,而对其他而对其他Linux发行版下应用的资料还很少。本章将介绍发行版下应用的资料还很少。本章将介绍MiniGUI在在Ubuntu下的安装和配置方法,以及如何使用下的安装和配置方法,以及如何使用eclipse进行进行MiniGUI的嵌入式开发的嵌入式开发。1-712.2.1
6、安装安装MiniGUI库库MiniGUI v3.0.12的源代码包可以在飞漫公司的网站上下载的源代码包可以在飞漫公司的网站上下载。安。安装步骤如下:装步骤如下:(1)使用)使用tar命令解压命令解压libminigui-3.0.12.tar.gz文件文件。 $tar zxvf libminigui-3.0.12.tar.gz(2)运行配置命令)运行配置命令。 $cd libminigui-3.0.12 $make menuconfig(3)如果没有出现错误,就可以继续执行)如果没有出现错误,就可以继续执行make和和make install命令编译并安装命令编译并安装libminigui库文件
7、库文件。 $make(4)默认情况下,)默认情况下,MiniGUi的函数库将安装在的函数库将安装在/usr/local/lib目录目录中中。1-812.2.2 安装安装MiniGUI的资源的资源MiniGUI资源的安装比较简单,只需解开软件包并以资源的安装比较简单,只需解开软件包并以root身份运身份运行行make install命令,如下所示命令,如下所示:$tar zxvf minigui-res-1.3.tar.gz$cd minigui-res-1.3.3$sudo make install1-912.2.3 配置配置MiniGUIMiniGUI的配置文件位于的配置文件位于“/usr/
8、local/etc/MiniGUI.cfg”,编辑,编辑这个文件需要具有这个文件需要具有root权限。这里主要是通过该文件选择通过权限。这里主要是通过该文件选择通过QVFB或是或是FrameBuffer作为图形引擎,详细的配置说明请参考作为图形引擎,详细的配置说明请参考MiniGUI的配置手册的配置手册。打开该文件后,请注意下列的配置选项打开该文件后,请注意下列的配置选项:1-1012.2.4 编译应用程序例子编译应用程序例子在在mg-samples-3.0.12.tar.gz中提供了很多介绍中提供了很多介绍MiniGUI中各类中各类函数和控件等使用的例子,这些例子都比较简单,适合初学时研函数
9、和控件等使用的例子,这些例子都比较简单,适合初学时研究。编译该应用程序例程库所需的命令如下:究。编译该应用程序例程库所需的命令如下:$tar zxvf mg-samples-3.0.12.tar.gz $cd mg-samples-3.0.12$./configure$make编译完成后,编译好的可执行文件都在编译完成后,编译好的可执行文件都在src子目录下。子目录下。1-1112.2.5 交叉编译交叉编译MiniGUI库库与编译与编译PC上的上的libminigui的过程是大致相同的,只需在的过程是大致相同的,只需在make menu出现的配置界面中略做配置即可。当出现如图出现的配置界面中略
10、做配置即可。当出现如图12-1所示的所示的配置界面后,选择菜单:配置界面后,选择菜单:Development environment options 按按Enter键后进入子菜单,需要配置的项如图键后进入子菜单,需要配置的项如图12-2所示。所示。1-1212.2.6 交叉编译例程交叉编译例程以交叉编译以交叉编译mg-sample-3.0为例,所需的命令如下:为例,所需的命令如下:$tar zxvf mg-samples-3.0.12.tar.gz $cd mg-samples-3.0.12$./configure$export PATH=”/usr/local/arm/3.4.1/bin”:
11、$PATH$make CC=arm-linux-gcc1-1312.2.7 QVFB图形引擎图形引擎QVFB是是Qt提供的一个虚拟提供的一个虚拟FrameBuffer工具。这个程序基于工具。这个程序基于Qt开发(开发(Qt是是Linux窗口管理器窗口管理器KDE使用的底层函数库),运行在使用的底层函数库),运行在X Window上。可以在上。可以在Qt 2或者或者Qt 3源代码的源代码的src/tools目录下找目录下找到这个程序到这个程序。将将qvfb2-2.0.tar.gz下载后解压,在其中的下载后解压,在其中的QVFB目录下可以找到目录下可以找到QVFB的可执行文件,打开一个终端,然后执
12、行命令:的可执行文件,打开一个终端,然后执行命令:$qvfb&1-1412.2.8 FrameBuffer图形引擎图形引擎FrameBuffer是出现在是出现在Linux 2.2.xx内核当中的一种驱动程序接内核当中的一种驱动程序接口。这种接口将显示设备抽象为帧缓冲区。用户可以将它看成是口。这种接口将显示设备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。使用接进行读写操作,而写操作可以立即反应在屏幕上。使用FrameBuffer需要内核的支持,同时也
13、与具体所使用的显示芯片需要内核的支持,同时也与具体所使用的显示芯片有关,在不同的系统下有不同的配置方法有关,在不同的系统下有不同的配置方法。1-1512.3 利用利用Eclipse编写编写MiniGUI程序程序Eclipse提供了一个使用十分方便的集成开发环境,在前面的章提供了一个使用十分方便的集成开发环境,在前面的章节中,介绍了如何使用节中,介绍了如何使用Eclipse开发一般的开发一般的Linux程序,在本节中程序,在本节中将介绍如何在将介绍如何在Eclipse中开发和调试中开发和调试MiniGUI的程序。在的程序。在Eclipse下开发下开发MiniGUI的程序主要有以下三点优势的程序主
14、要有以下三点优势:便于工程管理便于工程管理。便于查看帮助便于查看帮助。便于编译和调试便于编译和调试。1-1612.3.1 建立建立vacs工程工程vacs是是mde-1.3.0中的一个比较复杂的演示程序,共有中的一个比较复杂的演示程序,共有10个源代个源代码文件,需要先将这些代码导入至码文件,需要先将这些代码导入至Eclipse的工程中,请读者按的工程中,请读者按下列的步骤操作下列的步骤操作:(1)新建新建Project。选择菜单命令。选择菜单命令File | New | C Project,在随,在随后出现的后出现的Project name中输入工程的名字中输入工程的名字vacs,然后单击,
15、然后单击Finish按钮即可按钮即可。(2)导入源代码文件。选择菜单命令导入源代码文件。选择菜单命令File | Import,然后在分类,然后在分类General中选择中选择File System,单击,单击Browse按钮,选择按钮,选择mde-1.3.0中的中的vacs所在的目录,然后单击所在的目录,然后单击OK确认确认。(3)最后单击最后单击Finish按钮,完成导入工作按钮,完成导入工作。1-1712.3.2 配置编译选项配置编译选项因为因为MiniGUI的程序用到了的程序用到了libminigui、libpthread等库文件,等库文件,所以还需要在编译选项中做好相关的配置。选择菜
16、单所以还需要在编译选项中做好相关的配置。选择菜单Project | Properties,将出现,将出现vacs工程的属性配置对话框。在左侧的列表工程的属性配置对话框。在左侧的列表中选择中选择C/C+ Buile | Settings,然后进行如图,然后进行如图12-7所示的配置所示的配置。1-1812.3.3 配置外部工具配置外部工具QVFB尽管可以直接在命令行运行尽管可以直接在命令行运行QVFB,但,但Eclipse其实提供了更好其实提供了更好的选择,即利用的选择,即利用“外部工具外部工具”功能来启动功能来启动QVFB。配置的方法很。配置的方法很简单简单,选择菜单选择菜单Run | Ext
17、ernal Tools | Open External Tools Dialog,便打开了外部工具的配置界面,便打开了外部工具的配置界面。1-1912.3.4 运行运行vacs当完成前面的准备工作后,就可以运行当完成前面的准备工作后,就可以运行vacs了。选择菜单了。选择菜单Run | Run或组合键或组合键Crtl+F11都可以启动该程序。运行的效果如图都可以启动该程序。运行的效果如图12-10所示所示。1-2012.3.5 调试调试vacs回到编辑环境后,选择菜单回到编辑环境后,选择菜单Run | Debug或按下或按下F11键后便可以键后便可以进入调试模式,如图进入调试模式,如图12-1
18、1所示所示。1-2112.4 MiniGUI的编程基础的编程基础为了说明为了说明MiniGUI的程序结构,从一个经典的例子的程序结构,从一个经典的例子“HelloWorld”说起。函数源代码如下所示说起。函数源代码如下所示。1-2212.4.1 头文件头文件Helloworld的开始所包括的四个头文件是所有的开始所包括的四个头文件是所有MiniGUI应用程序应用程序都必须包括的头文件。它们的含义分别如下都必须包括的头文件。它们的含义分别如下:common.h:包括:包括MiniGUI常用的宏及数据类型的定义。常用的宏及数据类型的定义。minigui.h:包含了全局的和通用的接口函数以及某些杂项
19、函数:包含了全局的和通用的接口函数以及某些杂项函数的定义。的定义。window.h:包含了窗口有关的宏、数据类型、数据结构的定义:包含了窗口有关的宏、数据类型、数据结构的定义以及函数接口声明。以及函数接口声明。control.h:包含了:包含了libminigui中所有内建控件的接口定义中所有内建控件的接口定义。1-2312.4.2 程序入口程序入口一个一个C程序的入口点为程序的入口点为main()函数,而一个函数,而一个MiniGUI程序的入口程序的入口点为点为MiniGUIMain()。该函数的原型如下:。该函数的原型如下:int MiniGUIMain (int argc, const
20、char* argv)main()函数已经在函数已经在MiniGUI的函数库中定义了,该函数在进行一的函数库中定义了,该函数在进行一些些MiniGUI的初始化工作之后调用的初始化工作之后调用MiniGUIMain()函数。所以,函数。所以,每个每个MiniGUI应用程序应用程序(无论是服务器端程序无论是服务器端程序mginit还是客户端应还是客户端应用程序用程序)的入口点均为的入口点均为MiniGUIMain()函数。参数函数。参数argc和和argv与与C程序程序main函数的参数函数的参数argc和和argv的含义是一样的,分别为命令的含义是一样的,分别为命令行参数的个数和参数字符串的数组
21、指针。行参数的个数和参数字符串的数组指针。1-2412.4.3 创建和显示主窗口创建和显示主窗口每个每个MiniGUI应用程序的初始界面一般都是一个主窗口,可以通应用程序的初始界面一般都是一个主窗口,可以通过调用过调用CreateMainWindow()函数来创建一个主窗口,其参数是函数来创建一个主窗口,其参数是一个指向一个指向MAINWINCREATE结构的指针,本例中就是结构的指针,本例中就是CreateInfo,返回值为所创建的主窗口的句柄。,返回值为所创建的主窗口的句柄。MAINWINCREATE结构描述一个主窗口的属性结构描述一个主窗口的属性。创建完主窗口之后,还需要调用创建完主窗口
22、之后,还需要调用ShowWindow()函数才能把所创函数才能把所创建的窗口显示在屏幕上。建的窗口显示在屏幕上。ShowWindow()的第一个参数为所要显的第一个参数为所要显示的窗口句柄,第二个参数指明显示窗口的方式示的窗口句柄,第二个参数指明显示窗口的方式(显示还是隐藏显示还是隐藏),SW_SHOWNORMAL说明要显示主窗口,并把它置为顶层窗口说明要显示主窗口,并把它置为顶层窗口。1-2512.4.4 进入消息循环进入消息循环在调用在调用ShowWindow()函数之后,主窗口就会显示在屏幕上。和函数之后,主窗口就会显示在屏幕上。和其他其他GUI一样,现在是进入消息循环的时候了。一样,现
23、在是进入消息循环的时候了。MiniGUI为每一为每一个个MiniGUI程序维护一个消息队列。在发生事件之后,程序维护一个消息队列。在发生事件之后,MiniGUI将事件转换为一个消息,并将消息放入目标程序的消息队列之中。将事件转换为一个消息,并将消息放入目标程序的消息队列之中。应用程序现在的任务就是执行如下的消息循环代码,不断地从消应用程序现在的任务就是执行如下的消息循环代码,不断地从消息队列中取出消息,进行处理息队列中取出消息,进行处理。1-2612.4.5 窗口过程函数窗口过程函数窗口过程函数是窗口过程函数是MiniGUI程序的主体部分,应用程序实际所作的程序的主体部分,应用程序实际所作的工
24、作大部分都发生在窗口过程函数中,因为工作大部分都发生在窗口过程函数中,因为GUI程序的主要任务程序的主要任务就是接受和处理窗口收到的各种消息就是接受和处理窗口收到的各种消息。在在Helloworld程序中,窗口过程是名为程序中,窗口过程是名为HelloWinProc()的函数。的函数。窗口过程函数可以由程序员任意命名,窗口过程函数可以由程序员任意命名,CreateMainWindow()函函数根据数根据MAINWINCREATE结构类型的参数中指定的窗口过程创结构类型的参数中指定的窗口过程创建主窗口。窗口过程函数总是定义为如下形式建主窗口。窗口过程函数总是定义为如下形式:static int
25、HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam);1-2712.4.6 屏幕输出屏幕输出程序在响应程序在响应MSG_PAINT消息时进行屏幕输出。应用程序应首先消息时进行屏幕输出。应用程序应首先通过调用通过调用BeginPaint()函数来获得设备上下文句柄,并用它调用函数来获得设备上下文句柄,并用它调用GDI函数来执行绘制操作。这里,程序使用函数来执行绘制操作。这里,程序使用TextOut()文本输出函文本输出函数在客户区的中部显示了一个数在客户区的中部显示了一个“Hello world!”字符串。绘制结字符
展开阅读全文