嵌入式圖形用戶界面編程_第1頁
嵌入式圖形用戶界面編程_第2頁
嵌入式圖形用戶界面編程_第3頁
嵌入式圖形用戶界面編程_第4頁
嵌入式圖形用戶界面編程_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

嵌入式圖形用戶界面編程綜合課程設計2013.9.27嵌入式GUI概述GUI(GraphicsUserInterfase),圖形用戶界面,借助菜單、按鈕等標準界面元素和鼠標進行操作,幫助用戶方便地向計算機系統(tǒng)發(fā)出指令,并將系統(tǒng)運行的結果同樣以圖形方式顯示給用戶。嵌入式GUI:輕型、占用資源少、高性能、高可靠性、可配置。常用嵌入式GUIMicroWindowsMiniGUI其他圖形平臺:Qt/Embedded等IntroductionMiniGUI,是魏永明先生于1998年底主持和開發(fā)的一個自由軟件項目,現(xiàn)由北京飛漫軟件技術有限公司維護并開展后續(xù)開發(fā)。最后一個采用GPL授權的MiniGUI版本是1.6.10,從MiniGUI2.0.4開始MiniGUI被重寫并使用商業(yè)授權。Introduction歷經(jīng)十余年時間,MiniGui已經(jīng)成為性能優(yōu)良、功能豐富的嵌入式圖形用戶界面支持系統(tǒng),可支持任意一個多任務嵌入式操作系統(tǒng);實際已支持linux/uClinux、eCos、uC/OS-Ⅱ、VxWorks等嵌入式操作系統(tǒng)和數(shù)十種SOC芯片,已驗證的硬件平臺包括ARM-basedSoCs、MIPSbasedSoCs、IA-basedSoCs、PowerPC、M68K(DragonBall/ColdFire)、Intelx86等等。廣泛應用于通訊、醫(yī)療、工控、電力、機頂盒、多媒體終端等領域。使用MiniGUI成功開發(fā)產(chǎn)品的企業(yè)有華為、中興通訊、大唐移動、長虹、TCL、聯(lián)想、邁瑞、南瑞、炬力、D2等。這些用戶廣泛分部在中國大陸、臺灣、新加坡、韓國、美國、德國、意大利、印度、以色列等國家和地區(qū)。Introduction值得一提的是,在中國自主開發(fā)的3G通訊標準TD-SCDMA中,約有60%獲得入網(wǎng)許可證的TD-SCDMA手機使用MiniGUI作為其嵌入式圖形平臺,以支撐瀏覽器、可視電話等3G應用軟件的運行,其中有聯(lián)想TD30t、海信T68、中興通訊U85等大家熟悉的TD手機型號。MiniGUI典型應用Wi-Fi手機界面MiniGUI典型應用3G手機聯(lián)想TD30t,支持可視電話、CMMB手機電視、樂隨身聽、手機視頻等3G典型應用。MiniGUI典型應用下圖是飛漫軟件為某市政府開發(fā)的法律及政務查詢系統(tǒng)。MiniGUI典型應用東大集成電路有限公司采用MiniGUI在Linux操作系統(tǒng)上開發(fā)的PDA產(chǎn)品界面MiniGUI典型應用南京南瑞自動控制有限公司采用MiniGUI開發(fā)的電力監(jiān)控設備特點優(yōu)勢

MiniGUI為嵌入式Linux系統(tǒng)提供了完整的圖形系統(tǒng)支持,是全球針對嵌入式Linux僅有的兩個商用嵌入式GUI系統(tǒng)之一。MiniGUI為嵌入式Linux系統(tǒng)提供了完整的多進程支持;可以MiniGUI-Processes、MiniGUI-Threads或者MiniGUI-Standalone三種運行模式運行。MiniGui的三種運行模式Minigui-Threads。運行在Minigui-Threads上的程序可以在不同的線程中建立多個窗口,但所有的窗口在一個進程或者地址空間中運行,這種模式適合大多數(shù)傳統(tǒng)意義上的嵌入式操作系統(tǒng),如linux,uClinux;也是默認模式。Minigui-Lite。和Minigui-Threads相反,它上的每個程序是單獨的進程,每個進程也可以建立多個窗口。它適合具有完整UNIX特性的嵌入式Linux;Minigui-Standalone。這種運行模式下,MiniGUI可以以獨立進程方式運行,既不需要多線程也不需要多進程的支持,這種模式適合功能單一的應用場合。比如uClinux的嵌入式產(chǎn)品中。MiniGUI的主要技術特性1、硬件適配性:

可運行于各種含有MMU(內存管理單元)的32位處理器架構之上,如ix386、ARM、MIPS、PowerPC等。支持低端顯示設備(比如單色LCD)和高端顯示設備(8位色及以上顯示設備)。對顯示設備分辨率無最大和最小限制。MiniGUI的主要技術特性

副屏支持。當系統(tǒng)中有多個視頻設備時,可將一個作為MiniGUI的主屏,實現(xiàn)完整的多窗口系統(tǒng);而其它設備作為副屏,在其上通過MiniGUI的圖形接口來實現(xiàn)文字渲染、圖形顯示等功能。

可支持各種輸入設備,如PC鍵盤、PC鼠標、小鍵盤(Keypad)、觸摸屏、遙控器等等。

多種鍵盤布局的支持。MiniGUI除支持常見的美式PC鍵盤布局之外,還支持法語、德語等西歐語種的鍵盤布局。

MiniGUI的主要技術特性2、資源消耗:MiniGUI的靜態(tài)存儲隨配置選項的不同而不同,最少需占用1MB靜態(tài)存儲空間。MiniGUI啟動后,初始占用1MB動態(tài)存儲空間。建議系統(tǒng)內存為8MB以上。MiniGUI的主要技術特性3、操作系統(tǒng)適配性:支持Linux操作系統(tǒng)(非uClinux操作系統(tǒng))。內建資源支持??梢詫iniGUI所使用的資源,諸如位圖、圖標和字體等編譯到函數(shù)庫中,該特性可提高MiniGUI的初始化速度,并且非常適合無文件系統(tǒng)支持的實時嵌入式操作系統(tǒng)。針對嵌入式系統(tǒng)的特殊支持,包括一般性的I/O流操作,字節(jié)序相關函數(shù)等。MiniGUI的主要技術特性4、窗口子系統(tǒng)特性:完備的多窗口機制和消息傳遞機制。使用MiniGUI-Threads運行模式時,可在不同線程中創(chuàng)建主窗口,并支持線程間的消息傳遞;使用MiniGUI-Processes運行模式時,支持完整的多進程窗口系統(tǒng)。對話框和消息框支持。MiniGUI的主要技術特性提供常用的控件類,包括靜態(tài)文本框、按鈕、單行和多行編輯框、列表框、組合框、菜單按鈕、進度條、滑塊、屬性頁、工具欄、樹型控件、月歷控件、旋鈕控件、酷工具欄、網(wǎng)格控件、動畫控件等。其它GUI元素,包括菜單、加速鍵、插入符、定時器等。MiniGUI的主要技術特性5、圖形子系統(tǒng)特性:提供有增強GDI函數(shù),包括光柵操作、復雜區(qū)域處理、橢圓、圓弧、多邊形以及區(qū)域填充等函數(shù)。在提供有兼容于C99規(guī)范的數(shù)學庫平臺上,還提供有高級二維繪圖函數(shù),可設置線寬、線型以及填充模式等。通過MiniGUI的圖形抽象層及圖形引擎技術,也可以讓上述高級GDI接口在低端顯示屏上實現(xiàn)。各種流行圖像文件的支持,包括WindowsBMP、GIF、JPEG、PNG等(JPEG及PNG的支持通過libjpeg及l(fā)ibpng函數(shù)庫提供)。MiniGUI的主要技術特性Windows的資源文件支持,如位圖、圖標、光標等。多字符集和多字體支持,目前支持ISO8859-1~ISO8859-15、GB2312、GBK、GB18030、BIG5、EUC-JP、Shift-JIS、EUC-KR、UNICODE(UTF-8、UTF-16編碼)等字符集,支持等寬點陣字體、變寬點陣字體、Qt/Embedded使用的嵌入式字體QPF、TrueType矢量字體(對TrueType的支持通過freetype1.3函數(shù)庫提供)。

輸入法支持,用于提供各種可能的輸入形式;內建有適合PC平臺的漢字(GB2312)輸入法支持,包括內碼、全拼、智能拼音、五筆及自然碼等。MiniGUI的技術優(yōu)勢可伸縮性強。對CPU主頻要求不高,可以運行在CPU主頻只有60MHz的低端產(chǎn)品中。輕型、占用資源少。MiniGUI是一個定位于輕量級的嵌入式圖形庫,MiniGUI庫所占的空間最小可以裁剪到500K左右,對目前的嵌入式設備來說,滿足這一條件是綽綽有余的。此外,測試結果表明,MiniGUI能夠在CPU主頻為30MHz,僅有4MRAM的系統(tǒng)上正常運行(使用uClinux操作系統(tǒng)),這是其它針對嵌入式產(chǎn)品的圖形系統(tǒng)所無法達到的。MiniGUI的技術優(yōu)勢高性能、高可靠性。MiniGUI良好的體系結構及優(yōu)化的圖形接口,可確保最快的圖形繪制速度??膳渲眯?。MiniGUI可對硬件平臺,操作系統(tǒng),運行模式,需要支持的GAL引擎和IAL引擎,以及引擎相關選項。需要支持的字體類型,字符集,圖像文件格式,控件類等進行定制配置。

支持多種嵌入式操作系統(tǒng),具備優(yōu)秀的可移植性;MiniGui的體系結構FrameWork、MMI、KeyAPPs等應用程序接口MiniGuiPortableLayerANSICDevicesuC/OS-Ⅱ、Linux、uClinux、Linux、VxWorks、pSOSARM、MIPS、PowerPC、ix86MiniGui的體系結構MiniGui有良好軟件架構,通過抽象層將MiniGui上層和底層操作系統(tǒng)隔離開來,在不同的的操作系統(tǒng)上,MiniGui提供完全兼容的API接口?;贛iniGui的應用程序一般通過ANSIC庫以及MiniGui自身提供的API來實現(xiàn)自己的功能;MiniGui中的“可移植層”可將特定操作系統(tǒng)及底層硬件的細節(jié)隱藏起來,而上層應用程序則無需關心底層的硬件平臺輸出和輸入設備。MiniGui特有的運行模式也給跨操作系統(tǒng)的支持提供了便利。MiniGui提供的軟件包libminigui-1.6.10.tar.gz:MiniGui函數(shù)庫源代碼,其中包括下面三個函數(shù)庫:libminigui:提供窗口管理和圖形接口的核心函數(shù)庫,和大量標準控件。libmgext:libminigui的一個擴展庫,提供一些高級控件以及文件打開對話框等。libvcongui:一個應用程序可用的虛擬控制臺窗口,可以方便在minigui環(huán)境中運行字符界面的應用程序。MiniGui提供的軟件包minigui-res-1.6.10.tar.gz:MiniGui所使用的資源文件,包括基本字體,圖標、位圖和鼠標等等。mg-samples-1.6.10.tar.gz:MiniGui應用示列程序。mde-1.6.10.tar.gz:MiniGui的綜合演示程序包,包含了MiniGui的控件演示程序、字體演示程序、對話框演示程序、記事本演示程序,還有推箱子、掃雷、俄羅斯方塊等游戲。MiniGui的安裝1、硬件環(huán)境x86PC2、軟件環(huán)境Linux操作系統(tǒng)----Ubuntu9.10準備源代碼包庫文件:libminigui-1.6.10.tar.gz資源文件:minigui-res-1.6.10.tar.gz示例文件:mg-samples-1.6.10.tar.gz綜合演示文件:mde-1.6.10.tar.gzJPEG圖形支持庫:jpegsrc.v6b.tar.gzPNG圖形支持庫:libpng_src.tgzQBFB,模擬幀緩沖支持庫參考文獻MiniGUI技術白皮書forV2.0.4/1.6.10[PDF]:該文檔描述了MiniGUIV2.0.4/1.6.10的技術特性。DatasheetforMiniGUIV2.0.4/1.6.10[PDF]:該文檔對MiniGUIV2.0.4/1.6.10產(chǎn)品功能特性進行了詳盡的介紹?!禡iniGUI用戶手冊》V2.0.4/1.6.10[PDF]:主要描述MiniGUI的編譯時配置選項和運行時配置選項。參考文獻《MiniGUI編程指南》V2.0.4/1.6.10[PDF]:該文檔是一本關于MiniGUI編程的完整指南,講述了MiniGUI編程的基礎知識和各種編程方法及技巧,并詳細地描述了主要的API函數(shù)?!禡iniGUIAPI參考手冊》V1.6.10:本文檔是MiniGUIV2.0.4最詳盡的應用程序編程接口參考手冊。其中描述了MiniGUI所有的函數(shù)、結構、消息以及控件的接口定義和使用方法,是進行MiniGUI編程不可缺少的手冊。安裝minigui資源文件將所下載的源代碼包拷貝到工作目錄/home/missxx/minigui/下。打開一個終端窗口,切換為超級用戶:missxx@missxx-desktop:~/minigui$su密碼:root@missxx-desktop:/home/missxx/minigui/#tar-xvzfminigui-res-1.6.10.tar.gz(解壓縮)root@missxx-desktop:/home/missxx/minigui/#cdminigui-res-1.6.10(進入到所加壓的目錄下)root@missxx-desktop:/home/missxx/minigui/minigui-res-1.6.10#makeinstall(安裝)root@missxx-desktop:/home/missxx/minigui/minigui-res-1.6.10#ls/usr/local/lib/minigui/res/(在配置文件中有默認的安裝路徑)查看被安裝好的文件如下:bmpcursorfonticonimetabcd..退出文件夾安裝minigui庫文件root@missxx-desktop:/home/missxx/minigui/#tar-zxvflibminigui-1.6.10.tar.gzroot@missxx-desktop:/home/missxx/minigui/#lsroot@missxx-desktop:/home/missxx/minigui/#cdlibminigui-1.6.10root@missxx-desktop:/home/missxx/minigui/libminigui-1.6.10#lsroot@missxx-desktop:/home/missxx/minigui/libminigui-1.6.10#./configureroot@missxx-desktop:/home/missxx/minigui/libminigui-1.6.10#makeroot@missxx-desktop:/home/missxx/minigui/libminigui-1.6.10#makeinstallroot@missxx-desktop:/home/missxx/minigui/libminigui-1.6.10#ls/usr/local/lib(以配置文件中的默認安裝路徑查看安裝結果)root@missxx-desktop:/home/missxx/minigui/libminigui-1.6.10#cd..說明一般來說,安裝軟件庫后需要將庫的路徑更新到配置文件/etc/ld.so.conf中。由于配置文件已存在/usr/local/lib路徑,因此可不用添加。在安裝過程中,使用的是默認配置選項。--target選項用于指定目標平臺--prefix選項用于指定minigui函數(shù)庫的安裝路徑--host選項用語指明宿主機的類型--enable–lite用于指出生成基于進程的lite版本,而不生成基于線性的thread版本安裝minigui支持庫libpngroot@missxx-desktop:/home/missxx/minigui#tar–zxvflibpng_src.tgzroot@missxx-desktop:/home/missxx/minigui#cdlibpngroot@missxx-desktop:/home/missxx/minigui/libpng#lsroot@missxx-desktop:/home/missxx/minigui/libpng#makeinstall出現(xiàn)錯誤提示沒有zlib.h,安裝apt-getinstallzlib1g-devroot@missxx-desktop:/home/missxx/minigui/libpng#cd..安裝minigui支持庫libjpegroot@missxx-desktop:/home/missxx/minigui#tar–zxvfjpegsrc.v6b.tar.gzroot@missxx-desktop:/home/missxx/minigui#cdjpeg-6b/root@missxx-desktop:/home/missxx/minigui/jpeg-6b#lsroot@missxx-desktop:/home/missxx/minigui/jpeg-6b#makeinstall安裝過程中提示錯誤:無法創(chuàng)建普通文件“/usr/local/man/man1/cjpeg.1”:沒有那個文件或目錄make:***[install]錯誤1。經(jīng)過查看發(fā)現(xiàn)/usr/local/man/下沒有man1這個文件夾,建立此文件夾,再安裝。root@missxx-desktop:/home/missxx/minigui/jpeg-6b#mkdir/usr/local/man/man1root@missxx-desktop:/home/missxx/minigui/jpeg-6b#makeinstallroot@missxx-desktop:/home/missxx/minigui/jpeg-6b#cd..查看庫文件安裝是否成功庫文件分為動態(tài)鏈接庫和靜態(tài)鏈接庫,查看所安裝的庫文件:root@missxx-desktop:/home/missxx/minigui/#ls/usr/local/liblibmgext-1.6.so.10libminigui.alibvcongui-1.6.so.10libmgext-1.6.so.10.0.0libminigui.lalibvcongui-1.6.so.10.0.0libmgext.alibminigui.solibvcongui.alibmgext.lalibpng.alibvcongui.lalibmgext.solibpng.solibvcongui.solibminigui-1.6.so.10libpng.so.2miniguilibminigui-1.6.so.10.0.0libpng.so.2.1.0.12python2安裝QvfbminiGUI是基于幀緩存的,而不是我們平時PC平臺上X窗口,所以需要qvfb模擬幀緩存來運行顯示效果。qvfb是基于qt的工具安裝的時候要指定qt庫,直接下載最新的qt安裝。//root@missxx-desktop:/home/missxx/minigui#sudoapt-getinstallqt3-dev-tools-embedded//apt-getinstalllibqt3-headerslibqt3-mt-devroot@missxx-desktop:/home/missxx/minigui#apt-getinstallqt4-dev-tools在提示“解壓縮后會消耗掉51.4MB的額外空間。您希望繼續(xù)執(zhí)行嗎?[Y/n]”后,鍵入y,回車Qvfb配置先運行下列指令:exportgal_engine=qvfbexportdefaultmode=640x480-16bpp(在這里是640x480不是640*480)exportial_engine=qvfb注意在運行例程的時候先運行qvfb&,打開qvfb后,在FILE—>configure下選擇640x48016位色測試:root@missxx-desktop:/home/missxx/minigui#qvfb&編譯測試示例程序mg-samples-1.6.10.tar.gz是《MiniGUI編程指南》的示例代碼?!禡iniGUI編程指南》可從官方網(wǎng)上下載,編譯過程如下:root@missxx-desktop:/home/missxx/minigui/#tar–zxvfmg-samples-1.6.10root@missxx-desktop:/home/missxx/minigui/#cdmg-samples-1.6.10root@missxx-desktop:/home/missxx/minigui/mg-samples-1.6.10#lsroot@missxx-desktop:/home/missxx/minigui/mg-samples-1.6.10#./configureroot@missxx-desktop:/home/missxx/minigui/mg-samples-1.6.10#makeinstall運行程序./hellowordroot@missxx-desktop:/home/missxx/minigui/mg-samples-1.6.10#cdsrcroot@missxx-desktop:/home/missxx/minigui/mg-samples-1.6.10/src#./helloworld作業(yè)1請大家自己學習安裝MiniGui的綜合演示程序包:mde-1.6.10.tar.gz以Helloworld程序為例說明程序架構1、頭文件#include<minigui/common.h>#include<minigui/minigui.h>#include<minigui/gdi.h>#include<minigui/window.h>#include<minigui/control.h>#include<stdio.h>common.h包括MiniGui常用的宏及數(shù)據(jù)類型的定義。minigui.h包含了全局的和通用的接口函數(shù)以及某些復雜項函數(shù)的定義。gdi.h包含了繪圖函數(shù)的接口的定義。window.h包含了窗口有關的宏、數(shù)據(jù)類型、數(shù)據(jù)結構的定義以及函數(shù)接口聲明。control.h包含了所有內建控件的接口定義。程序架構2)MiniGUIMain函數(shù)入口點函數(shù)原型:intMiniGUIMain(intargc,constchar*argv[])

{

}

參數(shù)argc和argv與C程序main函數(shù)的參數(shù)argc和argv的含義是一樣的,分別為命令行參數(shù)個數(shù)和參數(shù)字符串數(shù)組指針。Main函數(shù)已經(jīng)在MiniGUI的函數(shù)庫中定義了,該函數(shù)在進行MiniGUI初始化工作之后調用了MiniGUIMain函數(shù)。程序架構3、設置主窗口屬性—MAINWINCREATE結構描述

CreateInfo.dwstyle=WS_VISIBLE|WS_BORDER|WS_CAPTION;//設置主窗口風格為初始可見的,并具有邊框和標題欄CreateInfo.dwExstyle=WS_EX_NONE;//設置該主窗口沒有擴展風格

CreateInfo.spCaption=“Hello,MiniGui!”;//設置主窗口的標題名

CreateInfo.hMenu=0;//設置主窗口沒有主菜單

CreateInfo.hCursor=GetSystemCursor(0);//設置主窗口光標為缺省光標

CreateInfo.hIcon=0;//設置主窗口沒有圖標

CreateInfo.MainWindowProc=HelloWinProc;//設置主窗口的消息處理過程函數(shù),所有發(fā)往該窗口的消息由該函數(shù)來處理

CreateInfo.lx=0;

CreateInfo.ty=0;

CreateInfo.rx=320;

CreateInfo.by=240;//設置窗口的左上角坐標(0,0),右下角坐標(320,240)

CreateInfo.iBkColor=COLOR_lightwhite;//設置主窗口的背景色為白色,COLOR_lightwhite為預定義像素值

CreateInfo.dwAddData=0;//設置主窗口的附加值為無

CreateInfo.hHosting=HWND_DESKTOP;//設置主窗口的托管窗口為桌面

程序架構4、創(chuàng)建和顯示主窗口//創(chuàng)建主窗口

hMainWnd=CreateMainWindow(&CreateInfo);

CreateMainWindow創(chuàng)建主窗口,參數(shù)是指向MAINWINCREATE結構的指針CreateInfo,返回值為所創(chuàng)建的主窗口的句柄。MAINWINCREATE結構描述一個主窗口的屬性。//顯示主窗口

ShowWindow(hMainWnd,SW_SHOWNORMAL);顯示主窗口到屏幕上。程序架構5、進入消息循環(huán)事件發(fā)生后,

MiniGUI將事件轉換為一個消息,并將消息放入目標程序的消息隊列之中。應用程序現(xiàn)在的任務就是執(zhí)行消息循環(huán)代碼,不斷地從消息隊列中取出消息,進行處理。//消息循環(huán)while(GetMessage(&Msg,hMainWnd)){

TranslateMessage(&Msg);

DispatchMessage(&Msg);

}程序架構6、窗口過程函數(shù)staticintHelloWinProc(HWNDhWnd,intmessage,WPARAMwParam,LPARAMlParam)

{

HDChdc;

switch(message){

//創(chuàng)建時發(fā)送的消息,用來做初始化處理

caseMSG_PAINT:

hdc=BeginPaint(hWnd);

TextOut(hdc,100,100,“Hello,MiniGui!”);//屏幕輸出

EndPaint(hWnd,hdc);

return0;//表明不需要進入默認處理函數(shù)中//結束時一些處理函數(shù),單擊窗口右上角關閉按鈕,發(fā)送MSG_CLOSE消息,主要銷毀主窗口和發(fā)送quit消息以退出消息循環(huán)

caseMSG_CLOSE:

DestroyMainWindow(hWnd);

PostQ

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論