OPENMiniGUI程序設(shè)計課件_第1頁
OPENMiniGUI程序設(shè)計課件_第2頁
OPENMiniGUI程序設(shè)計課件_第3頁
OPENMiniGUI程序設(shè)計課件_第4頁
OPENMiniGUI程序設(shè)計課件_第5頁
已閱讀5頁,還剩139頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、OPENMiniGUI程序設(shè)計1 目 錄 1.1.第一章第一章 嵌入式系統(tǒng)基本概念嵌入式系統(tǒng)基本概念 2.2.第二章第二章 LinuxLinux基礎(chǔ)基礎(chǔ) 5.5.第三章第三章 嵌入式交叉編譯環(huán)境嵌入式交叉編譯環(huán)境 5.5.第四章第四章 嵌入式開發(fā)環(huán)境的搭建嵌入式開發(fā)環(huán)境的搭建 5.5.第五章第五章 MiniGUIMiniGUI 6.6.第六章第六章 嵌入式數(shù)據(jù)庫嵌入式數(shù)據(jù)庫 OPENMiniGUI程序設(shè)計2 第5章 嵌入式開發(fā)環(huán)境的搭 建 u嵌入式GUI概述 uMiniGUI DEMO uMiniGUI的編譯和安裝 uMiniGUI程序框架 uMiniGUI編程基礎(chǔ) OPENMiniGUI程序

2、設(shè)計3 GUI(Graphics User Interface),圖形用戶界面,借助菜單、 按鈕等標準界面元素和鼠標進行操作,幫助用戶方便地向計算 機系統(tǒng)發(fā)出指令,并將系統(tǒng)運行的結(jié)果同樣以圖形方式顯示給 用戶。 嵌入式GUI:輕型、占用資源少、高性能、高可靠性、可配置 5.1嵌入式GUI概述 OPENMiniGUI程序設(shè)計4 5.2 常用嵌入式GUI介紹 MicroWindows MiniGUI 其他圖形平臺:其他圖形平臺:Qt/Embedded等等 OPENMiniGUI程序設(shè)計5 MiniGUIMicroWindowsOpenGUIQT/Embedded APIWin32風格X、Win32

3、風格風格私有私有QT(C+) API是否完備是否完備是是Win32不完善不完善是是是是 函數(shù)庫典型大小函數(shù)庫典型大小500K600K300K1.5M 可移植性可移植性很好很好很好很好只支持只支持X86平臺平臺較好(函數(shù)庫較好(函數(shù)庫 跨平臺交跨平臺交 叉編譯困叉編譯困 難)難) 授權(quán)條款授權(quán)條款GPL/商業(yè)許可商業(yè)許可 證證 MPL/LGPLLGPLQPL/GPL/商業(yè)商業(yè) 許可證許可證 多進程支持多進程支持好好X支持好,支持好, Win32不支不支 持持 不好不好好好 健壯性健壯性/穩(wěn)定性穩(wěn)定性好好很差很差一般一般差差 多語種支持多語種支持獨特的多字符獨特的多字符 集支持功集支持功 能能 一

4、般一般一般一般UNICODE, 效率低效率低 OPENMiniGUI程序設(shè)計6 MiniGUIMicroWindowsOpenGUIQT/Embedded 可配置和可定制可配置和可定制 性性 好,大量編好,大量編 譯配置選項譯配置選項 一般一般差差差差 系統(tǒng)資源消耗系統(tǒng)資源消耗小較大(基于較大(基于 UNIX套接字,套接字, 進程間通訊)進程間通訊) 最?。ú恢С肿钚。ú恢С?多進程)多進程) 最大(C+) 效率效率好好較差較差最好最好差差 操作系統(tǒng)支持操作系統(tǒng)支持Linux/uClin ux, uC/OSII, VxWorks等等 LinuxDos、Linux、 QNX Linux 硬件平臺

5、支持硬件平臺支持X86、ARM、 MIPS、 PowerPC X86、ARM、 MIPS X86X86、ARM 主要應(yīng)用區(qū)域主要應(yīng)用區(qū)域中國大陸、 臺灣地區(qū) 美國,及國內(nèi)少美國,及國內(nèi)少 數(shù)用戶數(shù)用戶 歐洲歐洲歐美、韓國 OPENMiniGUI程序設(shè)計7 5.3 MiniGUI概述 MiniGUI()原是由魏永明主持和開發(fā)的一個自由軟件()原是由魏永明主持和開發(fā)的一個自由軟件 項目,現(xiàn)由北京飛漫軟件技術(shù)有限公司維護并開展后續(xù)項目,現(xiàn)由北京飛漫軟件技術(shù)有限公司維護并開展后續(xù) 開發(fā)。開發(fā)。 遵循遵循GPL 條款條款 支持操作系統(tǒng)支持操作系統(tǒng)Linux、uClinux、VxWorks、eCos、 u

6、C/OS-II、pSOS、ThreadX 等等 MiniGUI 為應(yīng)用程序定義了一組輕量級的窗口和圖形設(shè)為應(yīng)用程序定義了一組輕量級的窗口和圖形設(shè) 備接口。備接口。 OPENMiniGUI程序設(shè)計8 手機手機/PDA MiniGUI 典型應(yīng)用 OPENMiniGUI程序設(shè)計9 數(shù)字媒體數(shù)字媒體/機頂盒機頂盒 MiniGUI 典型應(yīng)用 OPENMiniGUI程序設(shè)計10 工控儀表工控儀表 MiniGUI 典型應(yīng)用 OPENMiniGUI程序設(shè)計11 其他其他 MiniGUI 典型應(yīng)用 OPENMiniGUI程序設(shè)計12 miniGUI系統(tǒng)架構(gòu) OPENMiniGUI程序設(shè)計13 程序架構(gòu)分析: 結(jié)

7、構(gòu)體初始化 創(chuàng)建窗口 顯示窗口 消息循環(huán) 清理資源 MSG_CREATE MSG_PAINT MSG_CLOSE 消息處理函數(shù) OPENMiniGUI程序設(shè)計14 本機執(zhí)行環(huán)境 內(nèi)核:2.6.22 桌面:KDE 底層圖形接口:framebuffer 調(diào)試接口qvfb 1.0 miniGUI版本 1.6 OPENMiniGUI程序設(shè)計15 2.Hello miniGUI DEMO OPENMiniGUI程序設(shè)計16 1) 頭文件(前四個為必須)頭文件(前四個為必須) #include #include #include #include #include common.h 包括 MiniGUI常

8、用的宏及數(shù)據(jù)類型的定義。 minigui.h 包含了全局的和通用的接口函數(shù)以及某些雜項函數(shù)的定義。 gdi.h包含了繪圖函數(shù)的接口的定義 。 window.h 包含了窗口有關(guān)的宏、數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)的定義以及函數(shù)接口 聲明。 control.h 包含了 所有內(nèi)建控件的接口定義。 程序架構(gòu)分析: OPENMiniGUI程序設(shè)計17 2) MiniGUI程序入口點程序入口點 int MiniGUIMain (int argc, const char* argv) 函數(shù)原形: int MiniGUIMain (int argc, const char* argv) 參數(shù)argc 和argv 與C 程

9、序main 函數(shù)的參數(shù)argc 和argv 的含義 是一樣的,分別為命令行參數(shù)個數(shù)和參數(shù)字符串數(shù)組指針。 main 函數(shù)已經(jīng)在 MiniGUI的函數(shù)庫中定義了,該函數(shù)在進行一些 MiniGUI的初始化工作之后調(diào)用 MiniGUIMain函數(shù)。 程序架構(gòu)分析: OPENMiniGUI程序設(shè)計18 3) 設(shè)置主窗口屬性 MAINWINCREATE 結(jié)構(gòu)描述 /窗口信息 CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION; /風格 CreateInfo.dwExStyle = WS_EX_NONE; CreateInfo.spCaptio

10、n = Hello, world!; /標題名 CreateInfo.hMenu = 0; /無菜單 CreateInfo.hCursor = GetSystemCursor(0); CreateInfo.hIcon = 0; CreateInfo.MainWindowProc = HelloWinProc; /消息處理過程函數(shù) CreateInfo.lx = 0; CreateInfo.ty = 0; CreateInfo.rx = 320; CreateInfo.by = 240; CreateInfo.iBkColor = COLOR_lightwhite; CreateInfo.dwA

11、ddData = 0; CreateInfo.hHosting = HWND_DESKTOP; /托管窗口 程序架構(gòu)分析: OPENMiniGUI程序設(shè)計19 3) 設(shè)置主窗口屬性設(shè)置主窗口屬性 MAINWINCREATE 結(jié)構(gòu)描述結(jié)構(gòu)描述 CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION; 設(shè)置主窗口風格,這里把窗口設(shè)為初始可見的,并具有邊框 和標題欄。 CreateInfo.deExStyle = WS_EX_NONE; 設(shè)置主窗口的擴展風格,該窗口沒有擴展風格。 CreateInfo.spCaption = “HelloWo

12、rld” 設(shè)置主窗口的標題為”HelloWorld”。 程序架構(gòu)分析: OPENMiniGUI程序設(shè)計20 3) 3) 設(shè)置主窗口屬性設(shè)置主窗口屬性 MAINWINCREATE MAINWINCREATE 結(jié)構(gòu)描述結(jié)構(gòu)描述 CreateInfo.hMenu = 0; 設(shè)置主窗口的主菜單,該窗口沒有主菜單。 CreateInfo.hCursor = GetSystemCursor(0); 設(shè)置主窗口的光標為系統(tǒng)缺省光標。 CreateInfo.hIcon = 0; 設(shè)置主窗口的圖標,該窗口沒有圖標。 程序架構(gòu)分析: OPENMiniGUI程序設(shè)計21 3) 設(shè)置主窗口屬性設(shè)置主窗口屬性 MAIN

13、WINCREATE 結(jié)構(gòu)描述結(jié)構(gòu)描述 CreateInfo.iBkColor = PIXEL_lightwhite; 設(shè)置主窗口的背景色為白色,PIXEL_lightwhite 是 MiniGUI預定義的象素值。 CreateInfo.dwAddData = 0; 設(shè)置主窗口的附加數(shù)據(jù),該窗口沒有附加數(shù)據(jù)。 CreateInfo.hHosting = HWND_DESKTOP; 設(shè)置主窗口的托管窗口為桌面窗口。 程序架構(gòu)分析: OPENMiniGUI程序設(shè)計22 3) 設(shè)置主窗口屬性設(shè)置主窗口屬性 MAINWINCREATE 結(jié)構(gòu)描述結(jié)構(gòu)描述 CreateInfo.MainWindowProc

14、 = HelloWinProc; 設(shè)置主窗口的窗口過程函數(shù)為 HelloWinProc,所有發(fā)往該 窗口的消息由該函數(shù)處理。 CreateInfo.lx = 0; CreateInfo.ty = 0; CreateInfo.rx = 320; CreaetInfo.by=240; 設(shè)置主窗口在屏幕上的位置,該窗口左上角位于(0, 0),右 下角位于(320, 240)。 程序架構(gòu)分析: OPENMiniGUI程序設(shè)計23 4) 創(chuàng)建和顯示主窗口 /創(chuàng)建主窗口 hMainWnd = CreateMainWindow ( CreateMainWindow創(chuàng)建主窗口,參數(shù)是指向 MAINWINCRE

15、ATE結(jié)構(gòu)的指針 CreateInfo,返回值為所創(chuàng)建的主窗口的句柄。MAINWINCREATE 結(jié)構(gòu)描述 一個主窗口的屬性。 /顯示主窗口 ShowWindow(hMainWnd, SW_SHOWNORMAL); 顯示窗口在屏幕上。 程序架構(gòu)分析: OPENMiniGUI程序設(shè)計24 5) 進入消息循環(huán)進入消息循環(huán) MiniGUI 對 MiniGUI程序維護一種名叫消息隊列的數(shù)據(jù)結(jié)構(gòu)。 在發(fā)生事件之后,MiniGUI 將事件轉(zhuǎn)換為一個消息,并將消息 放入目標程序的消息隊列之中。應(yīng)用程序現(xiàn)在的任務(wù)就是執(zhí)行 消息循環(huán)代碼,不斷地從消息隊列中取出消息,進行處理。 /消息循環(huán) while (GetM

16、essage( DispatchMessage( 程序架構(gòu)分析: OPENMiniGUI程序設(shè)計25 6) 6) 窗口過程函數(shù)窗口過程函數(shù) static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) HDC hdc; RECT rc; char msg_text30; switch (message) /創(chuàng)建時發(fā)送的消息,用來做初始化處理,這里是初始化字符串內(nèi)容 case MSG_CREATE: break; /窗口繪畫時發(fā)送的消息,用來在界面繪圖或者輸出文字 /注意這里的return 0 表明不需

17、要進入默認處理函數(shù)中。 case MSG_PAINT: printf (BeginPaint.n); hdc = BeginPaint (hWnd); TextOut (hdc, 10, 50, ,Hello, world!); EndPaint (hWnd, hdc); printf (EndPaint.n); return 0; /結(jié)束時一些處理函數(shù),主要是銷毀主窗口和發(fā)送quit消息以退出消息循環(huán)。 case MSG_CLOSE: DestroyMainWindow (hWnd); PostQuitMessage (hWnd); return 0; return DefaultMainW

18、inProc(hWnd, message, wParam, lParam); 程序架構(gòu)分析: OPENMiniGUI程序設(shè)計26 6) 窗口過程函數(shù)窗口過程函數(shù) 在 helloworld.c程序中,窗口過程是HelloWinProc。 CreateMainWindow 函數(shù)根據(jù) MAINWINCREATE 結(jié)構(gòu)類型的參 數(shù)中指定的窗口過程創(chuàng)建主窗口。 窗口過程函數(shù)由 MiniGUI進行調(diào)用。 窗口過程函數(shù)不予處理的消息應(yīng)該傳給 DefaultMainWinProc 函數(shù)進行缺省處理。 程序架構(gòu)分析: OPENMiniGUI程序設(shè)計27 SendMessage MSG_CREATE CREATE

19、MAINWINDOW MSG_PAINT hWnd SHOWWINDOW PostMessage MSG_PAINT GetMessageWndProc 主窗口創(chuàng)建時消息動作過程:主窗口創(chuàng)建時消息動作過程: 程序架構(gòu)分析: OPENMiniGUI程序設(shè)計28 MSG_CLOSE hWnd MSG_Derstroy hWnd GetMessageWndProc 底層事件響應(yīng) 用戶單擊關(guān)閉按鈕 DestroyMainWindow PostQuitWindow hWnd MSG_QUIT QUIT 退出 主窗口銷毀時消息動作過主窗口銷毀時消息動作過 程:程: 程序架構(gòu)分析: OPENMiniGUI程

20、序設(shè)計29 7) 屏幕輸出屏幕輸出 MSG_PAINT消息-進行屏幕輸出。 case MSG_PAINT: hdc = BeginPaint (hWnd); TextOut (hdc, 60, 60, Hello world!); EndPaint (hWnd, hdc); return 0; 程序架構(gòu)分析: OPENMiniGUI程序設(shè)計30 8) 程序的退出程序的退出 單擊窗口右上角關(guān)閉按鈕,發(fā)送 MSG_CLOSE 消 息。 case MSG_CLOSE: DestroyMainWindow (hWnd); PostQuitMessage (hWnd); return 0; 程序架構(gòu)分析

21、: OPENMiniGUI程序設(shè)計31 9) 程序編譯程序編譯 MiniGUI-Threads 模式: $ gcc o helloworld helloworld.c lpthread lminigui pthread 線程庫 minigui minigui支持庫 程序架構(gòu)分析: OPENMiniGUI程序設(shè)計32 10) 程序執(zhí)行 ./helloworld 程序架構(gòu)分析: OPENMiniGUI程序設(shè)計33 MiniGUI函數(shù)庫組成 libminigui:核心庫,標準控件:核心庫,標準控件 libmgext :擴展庫,一些有用的控件:擴展庫,一些有用的控件 libvcongui:虛擬控制臺窗

22、口:虛擬控制臺窗口 OPENMiniGUI程序設(shè)計34 MiniGUI運行模式 MiniGUI-Threads MiniGUI-Lite MiniGUI-Standalone 注意:注意: 以下講述基于MiniGUI1.6; MiniGUI 2.0.x 中Lite模式升級為Processes 模式。 默認模式是MiniGUI-Threads。 OPENMiniGUI程序設(shè)計35 1) 提供了完備的提供了完備的多窗口機制和消息傳遞機制。 2) 提供常用的提供常用的控件類。 3) 對話框和消息框支持。對話框和消息框支持。 4) 其它 GUI 元素,包括菜單、加速鍵、插入符、定時 器等。等。 5)

23、界面皮膚支持。界面皮膚支持。 MiniGUI V1.6.x 的主要特征(1/4): OPENMiniGUI程序設(shè)計36 6) 支持低端顯示設(shè)備(比如單色支持低端顯示設(shè)備(比如單色 LCD)和高端顯示設(shè))和高端顯示設(shè) 備(比如彩色顯示器。備(比如彩色顯示器。 7) Windows 的資源文件支持,如位圖、圖標、光標等。的資源文件支持,如位圖、圖標、光標等。 8) 各種流行圖像文件的支持。各種流行圖像文件的支持。 9) 多字符集和多字體支持。 10) 多種鍵盤布局的支持。多種鍵盤布局的支持。 MiniGUI V1.6.x 的主要特征(2/4): OPENMiniGUI程序設(shè)計37 11) 漢字(漢

24、字(GB2312)輸入法支持。)輸入法支持。 12) 針對嵌入式系統(tǒng)的特殊支持,包括一般性的針對嵌入式系統(tǒng)的特殊支持,包括一般性的 I/O 流操作,字節(jié)序相關(guān)函數(shù)等。流操作,字節(jié)序相關(guān)函數(shù)等。 13) 層的支持。層的支持。 (MiniGUI-Lite 版本版本)。 14) 提供快速和增強的位塊操作,視頻加速支持以及提供快速和增強的位塊操作,視頻加速支持以及 Alpha 混合等功能。混合等功能。 MiniGUI V1.6.x 的主要特征(3/4): OPENMiniGUI程序設(shè)計38 15) 增強的新增強的新 GDI 函數(shù)。函數(shù)。 16) 圖形抽象層(GAL)以及輸入抽象層(IAL)。 Mini

25、GUI V1.6.x 的主要特征(4/4): OPENMiniGUI程序設(shè)計39 輕型、占用資源少輕型、占用資源少 高性能高性能 高可靠性高可靠性 可伸縮性強可伸縮性強 跨操作系統(tǒng)支持跨操作系統(tǒng)支持 可配置可配置 MiniGUI 優(yōu)勢: OPENMiniGUI程序設(shè)計40 MiniGUI編程指南編程指南 V1.6 MiniGUI API Reference Manual V1.6 其他資源其他資源 http:/ MiniGUI 參考手冊: OPENMiniGUI程序設(shè)計41 5.4 MiniGUI編譯安裝 北京飛漫軟件技術(shù)有限公司北京飛漫軟件技術(shù)有限公司 MiniGUI 免費版免費版 獲取Mi

26、niGUI: OPENMiniGUI程序設(shè)計42 libminigui-1.6.x.tar.gz:MiniGUI 函數(shù)庫源代碼,其函數(shù)庫源代碼,其 中包括中包括libminigui、libmgext 和和 libvcongui。 minigui-res-1.6.tar.gz:MiniGUI 所使用的資源,所使用的資源, 包括基本字體、圖標、位圖和鼠標光標。包括基本字體、圖標、位圖和鼠標光標。 mde-1.6.x.tar.gz:MiniGUI 的綜合演示程序。的綜合演示程序。 mg-smaples-1.6.x.tar.gz:MiniGUI 編程指南編程指南 的配套示例程序。的配套示例程序。 源代

27、碼及資源包 OPENMiniGUI程序設(shè)計43 基于基于VESA FrameBuffer的圖形引擎。的圖形引擎。 支持支持 FrameBuffer的的Linux內(nèi)核相關(guān)選項:內(nèi)核相關(guān)選項: MiniGUI圖形引擎 OPENMiniGUI程序設(shè)計44 修改修改/boot/grub/menu.lst 文件,文件,kernel 打頭的一行添加打頭的一行添加 vga=0 x0317 1024*768*16bpp 必須重新啟動才能生效必須重新啟動才能生效 Linux 引導時,會在屏幕的左上方顯示一個可愛的小企鵝或者發(fā)引導時,會在屏幕的左上方顯示一個可愛的小企鵝或者發(fā) 行版廠商的行版廠商的 LOGO 圖片

28、圖片 FrameBuffer OPENMiniGUI程序設(shè)計45 vga=0 x0317 FrameBuffer: OPENMiniGUI程序設(shè)計46 分辨率:分辨率: FrameBuffer分辨率: Colours640 x480800 x6001024x7681280 x10241600 x1200 8 bits0 x3010 x3030 x3050 x3070 x31C 16 bits0 x3110 x3140 x3170 x31A0 x31E 24 bits0 x3120 x3150 x3180 x31B0 x31F OPENMiniGUI程序設(shè)計47 libminigui-1.6.0

29、-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 本地安裝庫 OPENMiniGUI程序設(shè)計48 修改 /etc/ld.so.conf 文件 共享庫搜索目錄共享庫搜索目錄 /usr/lib /usr/X11R6/lib /usr/i486-linux-libc

30、5/lib /usr/local/lib 運行運行l(wèi)dconfig 命令刷新系統(tǒng)的共享庫搜索緩存:命令刷新系統(tǒng)的共享庫搜索緩存: $ su -c /sbin/ldconfig 本地安裝更新庫搜索路徑: OPENMiniGUI程序設(shè)計49 安裝安裝 MiniGUI 的資源的資源res.tar.bz2軟件包:圖標、光標等 $ tar jxvf res-host.tar.bz2 $ cd res $ make install 默認的安裝腳本會把 MiniGUI 資源文件安裝到 /usr/local/lib/minigui/res/ 目錄下。 本地安裝資源: OPENMiniGUI程序設(shè)計50 編譯應(yīng)

31、用程序例子sample.tar.bz2 $ tar jxvf mg-sample-1.6.0.tar.bz2 $ mv mg-sample-1.6.0 mg-sample-1.6.0-host $ cd mg-sample-1.6.0-host $ ./configure $ make 本地安裝代碼編譯: OPENMiniGUI程序設(shè)計51 PC 上MiniGUI 的運行 注意:必須要在控制臺模式才能運行注意:必須要在控制臺模式才能運行MiniGUI。要啟動。要啟動 控制臺,按住控制臺,按住CtrlAlt 的同時,按的同時,按F1F6 中的任意中的任意 一個均可,然后登錄系統(tǒng),進入一個均可,然

32、后登錄系統(tǒng),進入mg-sample-1.6.0- host/src 目錄,直接運行即可目錄,直接運行即可(./helloworld)。 按住按住CtrlAlt 的同時,按的同時,按7 可返回可返回 本地運行: OPENMiniGUI程序設(shè)計52 交叉編譯libminigui $ tar jxvf libminigui-1.6.0-linux.tar.bz2 $ cd libminigui-1.6.0-linux-target $ ./build/buildlib-uparm2410-TFT $ make $ make install (make需要持續(xù)幾分鐘需要持續(xù)幾分鐘) 默認的安裝腳本會把

33、 庫文件安裝到 /opt/host/armv4l/armv4l-unknown/linux/lib/ 目錄下 交叉安裝庫: OPENMiniGUI程序設(shè)計53 安裝安裝 MiniGUI 的資源的資源res.tar.bz2軟件包:圖標、光標等 $ tar jxvf res-target.tar.bz2 $ cd res-target $ make install 默認的安裝腳本會把 MiniGUI 資源文件安裝到 /opt/host/armv4l/armv4l- unknown/linux/lib/minigui/res/ 目錄下 交叉安裝資源: OPENMiniGUI程序設(shè)計54 編譯應(yīng)用程序

34、例子 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 交叉安裝代碼編譯: OPENMiniGUI程序設(shè)計55 將應(yīng)用程序拷貝到將應(yīng)用程序拷貝到/arm2410/目錄下目錄下 minicom通訊終端,連接好開發(fā)板和主機,打開電源通訊終端,連接好開發(fā)板和主機,打開電源 mount t nfs 192.168.0.xx:/arm2410 /h

35、ost ln s /dev/fb/0 /dev/fb0 建立符號連接建立符號連接 mknod /dev/tty0 c 4 0 建立建立/dev/tty0 設(shè)備設(shè)備 執(zhí)行執(zhí)行MiniGUI 應(yīng)用程序應(yīng)用程序 在目標板上運行: OPENMiniGUI程序設(shè)計56 5.5 MiniGUI程序架構(gòu) 分析分析 MiniGUI應(yīng)用程序應(yīng)用程序 helloworld 源代碼在源代碼在src目錄下目錄下 helloworld 程序運行結(jié)果程序運行結(jié)果 OPENMiniGUI程序設(shè)計57 5.6 MiniGUI編程基礎(chǔ) 本節(jié)內(nèi)容 MiniGUI窗口 MiniGUI消息及消息隊列 MiniGUI對話框 MiniG

36、UI菜單 MiniGUI基本控件 按鈕 靜態(tài)框 編輯框 OPENMiniGUI程序設(shè)計58 窗口 窗口是屏幕上的一個矩形區(qū)域。應(yīng)用程序的可視部分由窗口是屏幕上的一個矩形區(qū)域。應(yīng)用程序的可視部分由 一個或多個窗口構(gòu)成。窗口系統(tǒng)控制窗口的位置、大小、一個或多個窗口構(gòu)成。窗口系統(tǒng)控制窗口的位置、大小、 和可見區(qū)域。和可見區(qū)域。 一個應(yīng)用程序窗口一般包括如下部分:一個應(yīng)用程序窗口一般包括如下部分: 一個可視的邊界一個可視的邊界 一個窗口一個窗口ID,客戶程序使用該,客戶程序使用該ID操作窗口,操作窗口, “窗口窗口 句柄句柄” 一些其它特性:高、寬、背景色等一些其它特性:高、寬、背景色等 可能有菜單和

37、滾動條等附加窗口元素可能有菜單和滾動條等附加窗口元素 OPENMiniGUI程序設(shè)計59 窗口 屏幕上的重疊窗口通常具有如下的關(guān)系:屏幕上的重疊窗口通常具有如下的關(guān)系: 窗口一般組織為層次體系結(jié)構(gòu)的形式(或者說,樹的形式)。 根窗口(root window)是所有窗口的祖先,占滿整個屏幕的 表面,也稱 為桌面窗口。 除了根窗口以外的所有窗口都有父窗口,每一個窗口都可能有 子窗口、 兄弟窗口、祖先窗口和子孫窗口等 子窗口含在父窗口內(nèi),同一個父窗口內(nèi)的子窗口為同級窗口。 窗口有從屬關(guān)系,也就是說,某些窗口的生命周期和可見性由 它的所有 者決定。父窗口通常擁有它們的子窗口。 OPENMiniGUI程

38、序設(shè)計60 Desktop 主窗口1 主窗口2 控件 (子窗口) 控件 (子窗口) 控件 (子窗口) 對話框1 窗口體系 線程1 線程2 OPENMiniGUI程序設(shè)計61 MiniGUI MiniGUI 中有三種窗口類型:中有三種窗口類型:主窗口、對話框和控件窗口(子窗 口)。 每一個每一個MiniGUIMiniGUI應(yīng)用程序一般都要至少創(chuàng)建一個主窗口,作為應(yīng)用應(yīng)用程序一般都要至少創(chuàng)建一個主窗口,作為應(yīng)用 程序的主界面或開始界面。程序的主界面或開始界面。 主窗口通常包括一些子窗口,這些子窗口通常是控件窗口,也可主窗口通常包括一些子窗口,這些子窗口通常是控件窗口,也可 以是自定義窗口類以是自定

39、義窗口類。 應(yīng)用程序還會創(chuàng)建其它型的窗口,例如對話框。對話框本質(zhì)上就應(yīng)用程序還會創(chuàng)建其它型的窗口,例如對話框。對話框本質(zhì)上就 是主窗口,應(yīng)用程序一般通過對話框提示用戶進行輸入操作。是主窗口,應(yīng)用程序一般通過對話框提示用戶進行輸入操作。 主窗口: OPENMiniGUI程序設(shè)計62 主窗口沒有很精確的定義,目前可以認為其特征主要有主窗口沒有很精確的定義,目前可以認為其特征主要有 父窗口為父窗口為Desktop的,擁有子窗口,在創(chuàng)建后可以進入的,擁有子窗口,在創(chuàng)建后可以進入 消息循環(huán)。消息循環(huán)。 MiniGUI 為每個托管窗口為為每個托管窗口為Desktop的的主窗口建立單獨主窗口建立單獨 的消息

40、隊列的消息隊列,在該主窗口上派生出的主窗口、對話框及,在該主窗口上派生出的主窗口、對話框及 控件(子窗口)均使用同一消息隊列??丶ㄗ哟翱冢┚褂猛幌㈥犃?。 在調(diào)用在調(diào)用 MiniGUIMain之前,之前,MiniGUI 啟動桌面窗口啟動桌面窗口 Desktop。桌面窗口作為。桌面窗口作為 MiniGUI 的窗口管理器而存的窗口管理器而存 在,也是事實上根窗口。在,也是事實上根窗口。 主窗口: OPENMiniGUI程序設(shè)計63 MAINWINCREATE結(jié)構(gòu)體指定窗口信息: 窗口風格窗口風格 窗口標題窗口標題 窗口菜單窗口菜單 窗口圖標窗口圖標 窗口背景色窗口背景色 主窗口屬性: OPE

41、NMiniGUI程序設(shè)計64 主窗口屬性: CreateInfo.dwStyle窗口風格窗口風格 CreateInfo.spCaption窗口的標題窗口的標題 CreateInfo.dwExStyle窗口的附加風格窗口的附加風格 CreateInfo.hMenu附加在窗口上的菜單句柄附加在窗口上的菜單句柄 CreateInfo.hCursor在窗口中所使用的鼠標光標句柄在窗口中所使用的鼠標光標句柄 CreateInfo.hIcon程序的圖標程序的圖標 CreateInfo.MainWindowProc該窗口的消息處理函數(shù)指針該窗口的消息處理函數(shù)指針 CreateInfo.lx窗口左上角相對屏幕

42、的絕對橫坐標,以象素點表示窗口左上角相對屏幕的絕對橫坐標,以象素點表示 CreateInfo.ty窗口左上角相對屏幕的絕對縱坐標,以象素點表示窗口左上角相對屏幕的絕對縱坐標,以象素點表示 CreateInfo.rx窗口右下角相對屏幕的絕對橫坐標,以象素點表示窗口右下角相對屏幕的絕對橫坐標,以象素點表示 CreateInfo.by窗口右下角相對屏幕的絕對縱坐標,以象素點表示窗口右下角相對屏幕的絕對縱坐標,以象素點表示 CreateInfo.iBkColor窗口背景顏色窗口背景顏色 CreateInfo.dwAddData附帶給窗口的一個附帶給窗口的一個 32 位值位值 CreateInfo.hH

43、osting窗口消息隊列的托管窗口窗口消息隊列的托管窗口 OPENMiniGUI程序設(shè)計65 主窗口風格: 風格描述 WS_BORDER創(chuàng)建一個具有單線邊框的窗口創(chuàng)建一個具有單線邊框的窗口 WS_THICKFRAME創(chuàng)建一個具有寬邊框的窗口創(chuàng)建一個具有寬邊框的窗口 WS_THINFRAME創(chuàng)建一個具有細邊框的窗口創(chuàng)建一個具有細邊框的窗口 WS_CAPTION創(chuàng)建一個具有標題欄的窗口創(chuàng)建一個具有標題欄的窗口 WS_MAXMIZEBOX創(chuàng)建一個具有最大化框的窗口創(chuàng)建一個具有最大化框的窗口 WS_MINIMIZEBOX創(chuàng)建一個具有最小化框的窗口創(chuàng)建一個具有最小化框的窗口 WS_SYSMENU創(chuàng)建一個

44、具有系統(tǒng)菜單的窗口創(chuàng)建一個具有系統(tǒng)菜單的窗口 WS_HSCROLL創(chuàng)建一個具有水平滾動條的窗口創(chuàng)建一個具有水平滾動條的窗口 WS_VSCROLL創(chuàng)建一個具有垂直滾動條的窗口創(chuàng)建一個具有垂直滾動條的窗口 WS_DISABLED創(chuàng)建一個初始為禁止的窗口創(chuàng)建一個初始為禁止的窗口 WS_MAXIMIZE創(chuàng)建一個初始最大化的窗口創(chuàng)建一個初始最大化的窗口 WS_MINIMIZE創(chuàng)建一個初始最小化的窗口創(chuàng)建一個初始最小化的窗口 WS_VISIBLE創(chuàng)建一個初始可見的窗口創(chuàng)建一個初始可見的窗口 WS_EX_TOPMOST創(chuàng)建一個頂層窗口,創(chuàng)建一個頂層窗口,Win32 的擴展風格的擴展風格 WS_BORDER

45、WS_CAPTION WS_VISIBLE WS_VISIBLE OPENMiniGUI程序設(shè)計66 簡而言之,回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)。如果把簡而言之,回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)。如果把 函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當這個指針被函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當這個指針被 用為調(diào)用它所指向的函數(shù)時,就可以說這是回調(diào)函數(shù)。用為調(diào)用它所指向的函數(shù)時,就可以說這是回調(diào)函數(shù)。 使用回調(diào)函數(shù)實際上就是在調(diào)用某個函數(shù)(通常是類使用回調(diào)函數(shù)實際上就是在調(diào)用某個函數(shù)(通常是類APIAPI函數(shù))時,函數(shù))時, 將自己的一個函數(shù)(這個函數(shù)為回調(diào)函數(shù))的地址作

46、為參數(shù)傳遞將自己的一個函數(shù)(這個函數(shù)為回調(diào)函數(shù))的地址作為參數(shù)傳遞 給那個函數(shù)。而那個函數(shù)在需要的時候,利用傳遞的地址調(diào)用回給那個函數(shù)。而那個函數(shù)在需要的時候,利用傳遞的地址調(diào)用回 調(diào)函數(shù),這時你可以利用這個機會在回調(diào)函數(shù)中處理消息或完成調(diào)函數(shù),這時你可以利用這個機會在回調(diào)函數(shù)中處理消息或完成 一定的操作。至于如何定義回調(diào)函數(shù),跟具體使用的類一定的操作。至于如何定義回調(diào)函數(shù),跟具體使用的類APIAPI函數(shù)有函數(shù)有 關(guān),一般在幫助中有說明回調(diào)函數(shù)的參數(shù)和返回值等。關(guān),一般在幫助中有說明回調(diào)函數(shù)的參數(shù)和返回值等。 回調(diào)函數(shù): OPENMiniGUI程序設(shè)計67 主窗口過程實際是一個主窗口過程實際是

47、一個回調(diào)函數(shù),一般由,一般由 DispatchMessage 函數(shù)調(diào)用,用來處理應(yīng)用的消息。函數(shù)調(diào)用,用來處理應(yīng)用的消息。 定義:int TestMainWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) ; 四個入口參數(shù):消息的目標窗口句柄、消息、消息的 WPARAM (即unsigned int) 型參數(shù)和 LPARAM (即long int) 型參數(shù)。 在 32 位系統(tǒng)中,消息的兩個參數(shù)實際是等長度的。 主窗口的窗口過程處理應(yīng)用感興趣的消息,將其他消息主窗口的窗口過程處理應(yīng)用感興趣的消息,將其他消息 傳遞給傳遞給 D

48、efaultMainWinProc 函數(shù)處理。函數(shù)處理。 主窗口過程: OPENMiniGUI程序設(shè)計68 消息和消息隊列 MiniGUI 是一個圖形用戶界面支持系統(tǒng),通常的GUI 編程概念均 適用于MiniGUI 編程,如窗口和事件驅(qū)動編程等。 鍵盤和鼠標動作產(chǎn)生事件,這些事件通常被發(fā)送到具有焦點的窗 口,由該窗口相關(guān)聯(lián)的例程來處理。 焦點和光標的概念用于管理輸入設(shè)備和輸入事件的傳送。應(yīng)用程 序可以捕捉鼠標光標并獲取光標事件、鍵盤輸入焦點和鍵盤事件。 應(yīng)用程序可通過調(diào)用一些系統(tǒng)函數(shù)來要求重繪窗口或窗口的某一 部分,這些事件通常由窗口例程來處理。 事件驅(qū)動編程: OPENMiniGUI程序設(shè)計

49、69 消息被如下定義(消息被如下定義():): typedef struct _MSG HWND hwnd; /窗口句柄窗口句柄 int message; /消息類型消息類型 WPARAM wParam; /消息參數(shù)消息參數(shù) LPARAM lParam; /消息參數(shù)消息參數(shù) struct timeval time; void* pAdd; MSG; typedef MSG* PMSG; 消息結(jié)構(gòu)的定義: OPENMiniGUI程序設(shè)計70 l 系統(tǒng)消息: MSG_IDLE、MSG_TIMER、MSG_FDEVENT等; l 對話框消息: MSG_COMMAND、MSG_INITDIALOG、M

50、SG_SETTEXT等; l 窗口繪制消息: MSG_PAINT、MSG_ERASEBKGND等; l 窗口創(chuàng)建和銷毀消息: MSG_CREATE、MSG_DESTROY、MSG_CLOSE等; l 鍵盤和鼠標消息: MSG_KEYDOWN、MSG_CHAR、MSG_LBUTTONDOWN等; l 鼠標/鍵盤后處理消息: MSG_SETCURSOR、MSG_SETFOCUS、MSG_KILLFOCUS等; l 用戶自定義消息 MSG_USER 消息的種類: OPENMiniGUI程序設(shè)計71 消息隊列:系統(tǒng)中用于存儲消息的一塊內(nèi)存區(qū) 域,每個消息存儲在一個消息結(jié)構(gòu)中 。 MiniGUI有兩種向

51、窗口過程發(fā)送消息的辦法: 把消息投遞到一個先進先出的消息隊列中。大多 數(shù)消息。 通過消息發(fā)送函數(shù)直接調(diào)用窗口過程函數(shù)。需立 即處理,如MSG_ERASEBKGND消息。 消息隊列: OPENMiniGUI程序設(shè)計72 MiniGUI 為每個托管窗口為Desktop的主窗口建立單獨的消息隊 列,在該主窗口上派生出的主窗口、對話框及控件(子窗口) 均使用同一消息隊列。 消息隊列中存儲大部分消息,如底層的鍵盤和鼠標消息。還有 上層邏輯消息等等。大部分消息要經(jīng)過消息隊列存儲。 消息處理 OPENMiniGUI程序設(shè)計73 MiniGUI-Threads 中每個線程創(chuàng)建的第一個主窗口,其托管 窗口必須是

52、桌面,即HWND_DESKTOP,該線程的其他窗口, 必須由屬于同一線程的已有主窗口作為托管窗口。系統(tǒng)在托管 窗口為 HWND_DESKTOP 時創(chuàng)建新的消息隊列,而在指定非 桌面的窗口作為托管窗口時,使用該托管窗口的消息隊列。 窗口消息隊列的托管窗口 OPENMiniGUI程序設(shè)計74 消息循環(huán) minigui中大部分動作要在消息循環(huán)中調(diào)用消息處理函數(shù)來完成。 實際上消息循環(huán)就是不斷的從消息隊列中取出消息,直至遇到 MSG_QUIT才退出該次消息循環(huán)。 while (GetMessage( DispatchMessage( Msg 變量是類型為 MSG的結(jié)構(gòu),MSG結(jié)構(gòu)在 window.h中

53、。 消息處理: OPENMiniGUI程序設(shè)計75 窗口過程函數(shù) 在 helloworld.c程序中,窗口過程是HelloWinProc。 CreateMainWindow 函數(shù)根據(jù) MAINWINCREATE 結(jié)構(gòu)類型的參數(shù)中 指定的窗口過程創(chuàng)建主窗口。 窗口過程函數(shù)由 MiniGUI進行調(diào)用,是一個回調(diào)函數(shù)。 窗口過程函數(shù)不予處理的消息應(yīng)該傳給 DefaultMainWinProc 函 數(shù)進行缺省處理。 消息處理: OPENMiniGUI程序設(shè)計76 窗口過程函數(shù) 窗口過程函數(shù)總是定義為如下形式: static int HelloWinProc(HWND hWnd, int message

54、, WPARAM wParam, LPARAM lParam) 第一個參數(shù) hWnd是接受消息的窗口的句柄。 第二個參數(shù)標識窗口所收到消息的整數(shù)值。 最后兩個參數(shù)都是 32位的消息參數(shù)。 消息處理: OPENMiniGUI程序設(shè)計77 SendMessage MSG_CREATE CREATEMAINWINDOW MSG_PAINT hWnd SHOWWINDOW PostMessage MSG_PAINT GetMessageWndProc 主窗口創(chuàng)建時消息動作過程: OPENMiniGUI程序設(shè)計78 MSG_CLOSE hWnd MSG_Derstroy hWnd GetMessageW

55、ndProc 底層事件響應(yīng) 用戶單擊關(guān)閉按鈕 DestroyMainWindow PostQuitWindow hWnd MSG_QUIT QUIT 退出 主窗口銷毀時消息動作過程: OPENMiniGUI程序設(shè)計79 投遞(郵寄)消息:把消息復制到消息隊列中。投遞(郵寄)消息:把消息復制到消息隊列中。 發(fā)送消息:直接把消息發(fā)送到窗口過程函數(shù)。發(fā)送消息:直接把消息發(fā)送到窗口過程函數(shù)。 發(fā)送和投遞消息: OPENMiniGUI程序設(shè)計80 發(fā)送和投遞消息: 電話 發(fā)送消息發(fā)送消息 投遞消息投遞消息 郵箱 OPENMiniGUI程序設(shè)計81 PostMessage 立即返回。 “郵寄” PostS

56、yncMessage 向不同的線程消息隊列郵寄消息, 消息被處理之后返回, 同步消息?!班]寄” SendMessage 消息處理完成之后返回。 同線程“發(fā)送”。不同線程“郵寄”(PostSyncMessage)。 SendNotifyMessage 立即返回,不允許丟失。“郵 寄”。 SendAsyncMessage 異步消息?!鞍l(fā)送”。 發(fā)送和投遞消息: OPENMiniGUI程序設(shè)計82 對話框 簡單而言,模態(tài)對話框就是顯示之后,用戶不能再切換到其他主 窗口(同線程內(nèi))進行工作的對話框,而只能在關(guān)閉之后,才能 使用其他的主窗口。 MiniGUI 中,使用 DialogBoxIndirect

57、Param 函數(shù)建立的對話框 就是模態(tài)對話框。 實際上,該對話框首先根據(jù)模板建立對話框,然后禁止其托管主 窗口,并在主窗口的 MSG_CREATE 消息中創(chuàng)建控件,之后發(fā)送 MSG_INITDIALOG消息給回調(diào)函數(shù),最終建立一個新的消息循環(huán), 并進入該消息循環(huán),直到程序調(diào)用 EndDialog函數(shù)為止。 非模態(tài)可以切換,不禁用托管主窗口。 模態(tài)與非模態(tài) OPENMiniGUI程序設(shè)計83 編程實例編程實例 對話框演示程序 OPENMiniGUI程序設(shè)計84 對話框是一種特殊的主窗口,應(yīng)用程序一般通過 DialogBoxIndirectParam 函數(shù)創(chuàng)建對話框。需準備 對話框模板和對話框的窗

58、口過程函數(shù)。 按下“確定”按鈕或者關(guān)閉對話框時,調(diào)用EndDialog 用 來結(jié)束對話框過程。 DestroyAllControls 用來銷毀對話框(包括主窗口) 中的所有子控件。 對話框: OPENMiniGUI程序設(shè)計85 對話框是一種特殊的主窗口,應(yīng)用程序一般通過 DialogBoxIndirectParam 函數(shù)創(chuàng)建對話框: int GUIAPI DialogBoxIndirectParam (PDLGTEMPLATE pDlgTemplate,HWND hOwner, WNDPROC DlgProc, LPARAM lParam); 該函數(shù)建立的對話框稱為模態(tài)對話框。用戶需要為此函

59、數(shù)準備對話框模板和對話框的窗口過程函數(shù)。 模態(tài)對話框創(chuàng)建: OPENMiniGUI程序設(shè)計86 在 MiniGUI 中,用兩個結(jié)構(gòu)來表示對話框模板:控件數(shù)組和對話 框模板。先介紹一下控件數(shù)組。 typedef struct char* class_name; / control class DWORD dwStyle; / control style int x, y, w, h; / control position in dialog int id; / control identifier const char* caption; / control caption DWORD dwAd

60、dData; / additional data DWORD dwExStyle; / control extended style CTRLDATA; typedef CTRLDATA* PCTRLDATA; 對話框模板: OPENMiniGUI程序設(shè)計87 #define IDC_PROMPTINFO100 #define IDC_OK 110 /對話框模版,設(shè)置各個控件的屬性 static CTRLDATA CtrlInitProgress = static, WS_VISIBLE | SS_SIMPLE, 10, 10, 380, 16, IDC_PROMPTINFO, 你好!, 0

溫馨提示

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

評論

0/150

提交評論