基于minigui的嵌入式gui开发内容摘要:

版的 Linux系统中普遍采用的 GUI是XWindows系统,但显然它相对于嵌入式系统来说是过于庞大了,嵌入式系统要求西北大学学士学位论文 11 的是一个轻量级的性能可靠和可裁减的 GUI,因此需要重新开发适合嵌人式系统的 GUI。 目前国内外已经推出了很多基于 Linux的 GUI产品,现在比较流行的一些 GUI产品包括 MiniGUI、 MicmWindov,OpenGUI、 QT/ Embedded等,其中 QT/ Embedded属于商业化的产品,其他属于开源软件。 5 嵌入式界面开发框架 和 Minigui 版本描述 本嵌入式界面的开发选择开放源码的 Linux 操作系统作为平台,采用 MiniGUI 作为图形用户界面支持系统。 其相应的版本号如下: Linux 操作系统的版本为 RedHat。 GNU C编译器版本为。 图形用户界面支持系统 MiniGUI 的函数库源代码 libminigui 版本为。 MiniGUI 所使用的资源文件 miniguires 版本为 的上述文件代码可在网站 上下载到。 由于本次工作只做 LMTGUI 的部分开发,即不涉及 LMTGUI 在相应硬件平台上的移植和测试,所以在此不介绍开发相应系统的硬件平台。 在 PC 机上的开发 由于在嵌入式系统环境下调试 MiniGUI程序比较复杂,为了缩短开发周期,可以先将程序在 PC机上调试,成功后加载进嵌入式 Linux的文件系统即可。 由于不涉及 LMTGUI的移植,在此将不会介绍移植过程。 第一:设置 MiniGUI运行环境。 为了运行 MiniGuI,需要激活系统的 FrameBuffer设备驱动程序。 由于安装的 Linux系统是 RedHat ,且在安装 Red Hat 时使用了 GRUB作为引导装载器,其激活 FrameBuffer过程如下:首先需要修改/boot/grub/,在第一个出现 Red Hat Linux()的地方,把它修改为 Red Hat Linux(, FrameBuffer)。 并在 kernel打头的一行添加vga=。 第二:建立 MiniGUI运行环境。 要开发 MiniGUI程序,首 先要建立其开发环境。 MiniGuI图形系统由函数库、资源及演示程序组成。 MiniGUI的函数库部分由libminigui, libmgext以及 libvcongui三个函数库组成。 MiniGUI的资源部分包括西北大学学士学位论文 12 运行 MiniGUI应用程序需要的基本字体、图标、位图以及鼠标光标等。 安装上述源文件的过程如下所述。 首先安装 MiniGUI的资源文件。 第一步, 使用 tar命令解开,使用如下命令: $tar zxf。 该命令将建立。 第二步,用 cd命令改变到新建的目录中,然后以超级用户的身份运行 make install命令:make install。 其次配置和编译 ,使用 tar解开 的目录。 该命令将建立。 第二步,改变到这一新目录,然后运行 ./configure:,命令如下 $./,运行下面命令编译并安装MiniGUI: $make。 第四步,修改 /etc/,将 /usr/local/lib目录添加到该文件的最后一行。 第五步,安装 MiniGUI之后,运行下面的命令更新共享函数库系统的缓存: ldconfig。 第三:图形用户界面的开发。 图形用户界面的开发流程图如图 51所示。 (1)头文件 程序实现时,开始是包含的头文件。 在本次开发的程序中包含的 MiniGUI图形包的头文件有 : MiniGUI常用的宏及数据类型的定义; ; 、数据类型 、数据结构以及函数接口声明; MiniGUI绘图函数的接 121定义; libminigui中所有内建控件的接口定义; ( 2)程序入口点 MiniGUI的程序人口点是 MiniGUIMain函数,系统初始化后就会自动找到该函数。 再通过 调用 InitDialogBox (HWND_DESKTOP)函数初始化对话框。 本程序使用对话框模板来创建对话框和对话框中的控件。 在 MiniGUI中,对话框是一类特殊的主窗口,这种主窗 口只关注与用户的交互 —— 向用户提供输出信息,但更多的是 用于用户输入。 对话框可以理解为子类化后的主窗口类。 在 MiniGUI 中,用两个结构 CTRLDATA 和西北大学学士学位论文 13 DLGTEMPLATE 来表示对话框模板( minigui/) 【 1】 . CTRLDATA 用来定义控件, DLGTEMPLATE 用来定义对话框本身。 图 51 图形用户界面开发流程图 ( 3)对话框回调函数 在定义完对话框模板数据之后,需要定义对话框的回调函数,并调用DialogBoxIndirecParam函数建立对话框。 在程序中根据需要一 共建立了 14个控件。 包括 6个静态框, 5个按钮, 1个进度条, 1个旋钮数字框和 1个定时器。 对话框回调函数是一类特殊的主窗口回调函数。 在程序中它需要处理如下消息: MSG_INITDIALOG消息 :该消息是在 MiniGUI根据对话框模板建立对话框以及控件之后,发送到对话框回调函数的。 该消息的 lParam参数包含了由DialogBoxIndirectParam函数的第四个参数传递到对话框回调函数的值。 MSG_TIMER消息: 创建定时器时指定的窗口会收到 MSG_TIMER消息,并传递到期程序入口点 MiniGUIMain 调用 InitDialogBox (HWND_DESKTOP)函数 定义对话框各控件 建立对话框及控件 定义对话框 定义对话框回调函数 对话框与控件, 控件与控件间消息传递 程序退出 西北大学学士学位论文 14 的定时器标号。 定时器消息是优先级最低的消息类型,只有消息队列中不存在其他类型的消息时,系统才会去检查是否有定时器的到期。 在程序中用定时器来 确定加热的时间长短,并在进度条中显示出来。 MSG_COMMAND消息 : 当命令按钮被击中后,从该按钮发送一个消息到窗口或其对话框。 其中按钮标识符 id= LOWORD(wParam),通知消息的代码为: code = HIWORD(wParam)。 在程序中因为有多个按钮控件,所以要多次用到该消息。 ( 4) 程序的退出 在程序中,当单击 EXIT按钮时,会按顺序调用函数 DestroyAllControls (hDlg)和函数 EndDialog (hDlg, wParam)来结束程序。 DestroyAllControls销毁对话框中的所有子控件, EndDialog用来销毁对话框本身。 6LMAGUI描述 LMTGUI 作为一种激光医疗设备上的嵌入式界面,非常小,性能好,效率比较高,占用的资源少。 它一共分为 6 个子界面,如图 61所示。 在进入系统界面的正中间有一行提示语言:“ Wele to system!” 在其左下方有“ NEXT” 按钮 ,通过单 击此按钮可进入预热时间设置界面。 “ NEXT” 按钮通过隐藏进入系统界面中的子控件,显示下一界面的子控件来完成程序赋予它的功能。 其相应的源代码如下所示。 case IDC_COM1: /*Show IDC_STATIC2,IDC_DATA,IDC_STATIC3。 hide IDC_STATIC1,IDC_COM1.*/ SendDlgItemMessage(hDlg, IDC_DATA, CB_SETSPINRANGE, 1, 20)。 /*SET THE RANGE 120 OF IDC_DATA*/ SendDlgItemMessage(hDlg, IDC_DATA, CB_SETSPINVALUE, 5, 0)。 hwnd1=GetDlgItem (hDlg, IDC_STATIC1)。 hwnd2=GetDlgItem (hDlg, IDC_COM1)。 hwnd3=GetDlgItem (hDlg, IDC_STATIC2)。 hwnd4=GetDlgItem (hDlg, IDC_COM2)。 hwnd5=GetDlgItem (hDlg, IDC_DATA)。 hwnd6=GetDlgItem (hDlg, IDC_STATIC3)。 if (hwnd1amp。 amp。 hwnd2amp。 amp。 hwnd3amp。 amp。 hwnd4amp。 amp。 hwnd5amp。 amp。 hwnd6) 西北大学学士学位论文 15 {DestroyWindow (hwnd1)。 /*ShowWindow(hwnd1,SW_HIDE)。 */ DestroyWindow (hwnd2)。 /*HWND GUIAPI GetDlgItem (HWND hDlg, int nIDDlgItem)*/ ShowWindow(hwnd3,SW_SHOW)。 ShowWindow(hwnd4,SW_SHOW)。 ShowWindow(hwnd5,SW_SHOW)。 ShowWindow(hwnd6,SW_SHOW)。 } else return 0。 break。 图 61 LMAGUI 系统界面 进入系统的界面图如图 62所示: 预热时间设置界面 预热过程等待界面 退出系统界面 进入系 统界面 正常工作界面 工作暂停界面 西北大学学士学位论文 16 图 63 预热时间设置界面 图 62 系统进入界面 在第 二 个预热时间设置界面 (如图 63) 中一共有 4个控件,它们分别是预热时间设置提示语言,预热时间设置框,确定按钮以及退出按钮。 提示语言代码和按钮的代码基本与前面的相同,下面着重列出预热时间设置框 接受用户输入的时间 的代码: (在用户单击确定按钮时,处理预热时间设置框接受到的数据,并设置好定时器) min = SendDlgItemMessage(hDlg, IDC_DATA, CB_GETSPINVALUE, 0, 0)。 /*获得用户所设置的预热时间 ,单位为分钟 */ SetTimer(hDlg,IDC_TIMER,500)。 /*给对话框发一次定时消息 */ hOldCursor = SetDefaultCursor (GetSystemCursor (IDC_WAIT))。 /*设置鼠标状态为忙 */ 第三个界面为预热过程等待界面,在等待过程中,选用进度条作为 直观的已等待时间显示,让用户的等待不至于没有期望,减少用户对系统的焦虑。 进度条控件的显示参数设置如下: { progressbar, WS_CHILD|PBS_NOTIFY, 10, 40, 380, 20, IDC_PROGRESS, NULL, 西北大学学士学位论文 17 0 }, 其相应的操作行为代码如下: SendMessage(hwnd1,PBM_SETPOS,0, 0)。 /*hwnd1为 进度条的操作句柄,该函数设置进度条的起始位置为 0,进度方向为前进方向 */ SendDlgItemMessage(hDlg, IDC_PROGRESS, PBM_DELTAPOS, 5, 0)。 /*设置进度条的进行过程进度 ,定时器每发送一次定时消息,进度加 5*/ SendDlgItemMessage(hDlg, IDC_PROGRESS, PBM_SETRANGE,1, min*60)。 /*,设置进度条的进度范围,从 1到 min*60, min为用户设置的时间 */ 当用户设置的时间到达时,即进度条到达最大值时,系统会自动进入正常工作状态界面。 正常工作界面主要是为了表明系统正在进行工作,并且工作正常。 若想停止系统工作,可单击此界面下的“ STOP”按钮,则 系统会进入工作暂停界面。 通过单击“ EXIT”按钮,可进入最后一个界面,即退出系统界面,在该界面有“ Thanks using the system!”作为系统退出界面的提示语言。 在退出界面时会做一些善 后工作,先处理一些系统的信号,并销毁所有子控件和对话框 , 让系统稳定退出。 7 结论 在开发应用于激光医疗设备的嵌入式系统界面 LMAGUI中,首先熟悉了 Linux操作系统,它是一种可配置的,稳定性好,源码开放的系统,非常适合于嵌入式系统的开发。 用 C 语言写成的 MiniGUI 采取的是事件加消息的驱动机制,非常接近于 面向对象的编程语言。 由于 它本身小巧的特点,常用于中小型系统的嵌入式界面开发。 在开发过程中不但熟悉了这些软件,还掌握了开发嵌入式界面的基本流程。 激光医疗设备的操作比较简单,这使得 LMAGUI 的界面也相对简洁。 在开发过程中,主要用模板对话框来建立系统界面的,通过控件之间 以及控件与对话框之间 的消息。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。