MicroWindows體系結(jié)構(gòu)及應(yīng)用程序接口_第1頁
MicroWindows體系結(jié)構(gòu)及應(yīng)用程序接口_第2頁
MicroWindows體系結(jié)構(gòu)及應(yīng)用程序接口_第3頁
MicroWindows體系結(jié)構(gòu)及應(yīng)用程序接口_第4頁
MicroWindows體系結(jié)構(gòu)及應(yīng)用程序接口_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、MicroWindows體系結(jié)構(gòu)及應(yīng)用程序接口     這篇MicroWindows體系結(jié)構(gòu)及應(yīng)用程序接口的關(guān)鍵詞是Mi,ic,cr,ro,oW,Wi,in,nd,do,ow,ws,s體,體系,系結(jié),結(jié)構(gòu),構(gòu)及,及應(yīng),應(yīng)用,用程,程序,序接,接口,口,             摘要:MicroWindows是一個(gè)著名的開放源碼的嵌入式GUI軟件。本文簡要論述了MicroWindows的體系結(jié)構(gòu)和應(yīng)用程序接口,并介紹其設(shè)備驅(qū)動(dòng)特性、API

2、、客戶機(jī)/服務(wù)器模型和畫圖機(jī)制。        關(guān)鍵詞:MicroWindows API Nano-X 圖形用戶界面    許多開發(fā)者在嵌入式設(shè)計(jì)中開始使用類似于桌面的操作系統(tǒng)。其中一個(gè)方案就是Linux操作系統(tǒng)。由于Linux在嵌入式系統(tǒng)上具有桌面電腦的全部功能和特性,作為一種免費(fèi)的開放源碼,它允許修改和根據(jù)用戶的要求進(jìn)行定制。    MicroWindows是一個(gè)開放源碼的嵌入式GUI軟件,目的是把圖形視窗環(huán)境引入到運(yùn)行Linux的小型設(shè)備和

3、平臺(tái)上。作為X Window系統(tǒng)的替代品,MicroWindows可以用更少的RAM和文件存儲(chǔ)空間(100KB600KB)提供相似的功能,允許設(shè)計(jì)得輕松加入各種顯示設(shè)備、鼠標(biāo)、觸摸屏和鍵盤等;可移植性非常好,可用C語言實(shí)現(xiàn);支持Intel 16位/32位CPU、MIPS R4000以及基于ARM內(nèi)核的處理器芯片。    1 體系結(jié)構(gòu)    1.1 分層結(jié)構(gòu)設(shè)計(jì)    MicroWindows采用分層結(jié)構(gòu)設(shè)計(jì)方法,在底層提供對(duì)屏幕、鼠標(biāo)、觸摸屏和鍵盤的驅(qū)動(dòng),在程序能訪問實(shí)際的硬

4、件設(shè)備和其它用戶定制設(shè)備。在中間層有一個(gè)可移植圖形引擎,提供繪制線程、區(qū)域填充、繪制多邊形、裁減和使用顏色模式的方法。在頂層實(shí)現(xiàn)多種API以適應(yīng)不同的應(yīng)用環(huán)境。目前,MicroWindows中使用兩種流行的圖形編程接口:Microsoft Windows Win32/WinCE圖形顯示接口(GDI)和Xlib接口。前者應(yīng)用于所有的Windows CE和Win32應(yīng)用程序;后者就像Nano-X,應(yīng)用于所有Linux X插件集的最底層,這樣可讓Linux圖形程序員X接口開發(fā)圖形應(yīng)用程序。    1.2 驅(qū)動(dòng)設(shè)備    

5、device.h文件中定義設(shè)備驅(qū)動(dòng)接口。MicroWindows已實(shí)現(xiàn)至少將一個(gè)屏幕、鼠標(biāo)和鍵盤的驅(qū)動(dòng)與系統(tǒng)相連。獨(dú)立圖形設(shè)備引擎的中間層可以使驅(qū)動(dòng)設(shè)備直接完成對(duì)硬件的具體操作。    (1)屏幕驅(qū)動(dòng)    MicroWindows可運(yùn)行在支持Framebuffer的32位Linux系統(tǒng)上,也可使用SVGALib45庫來進(jìn)行圖形顯示。此外,還被移植到16位的ELKS和實(shí)模式的MSDOS上,實(shí)現(xiàn)1、2、4、8、16和32位的像素支持,以及實(shí)現(xiàn)VGA16平面模式支持。它的圖形引擎能夠運(yùn)行在任何支持readpixel、w

6、ritepixel、drawhorzline、drawvertline和setpalette的系統(tǒng)之上。如果底層驅(qū)動(dòng)系統(tǒng)實(shí)現(xiàn)了Blitting,則上層可提供更多的增強(qiáng)功能。在底層函數(shù)的支持之下,上層實(shí)現(xiàn)了對(duì)位圖、字體、光標(biāo)以及顏色的支持。除了基于調(diào)色板的1、2、4和8位像素模式,也實(shí)現(xiàn)15、16和32位像素的真彩模式。    (2)鼠標(biāo)驅(qū)動(dòng)    MicroWindows有三個(gè)鼠標(biāo)驅(qū)動(dòng)程序。GPM驅(qū)動(dòng)程序mou_gpm.c支持Linux系統(tǒng),串口鼠標(biāo)驅(qū)動(dòng)程序mou_ser.c支持Linux和ELKS系統(tǒng),int33

7、驅(qū)動(dòng)程序mou_dos.c支持MSDOS系統(tǒng)。鼠標(biāo)驅(qū)動(dòng)程序的基本功能,是將鼠標(biāo)中的數(shù)據(jù)編碼,然后返回關(guān)于鼠標(biāo)位置和按鍵的相對(duì)或絕對(duì)數(shù)據(jù)。    在Linux下,MicroWindows的主循環(huán)是select()聲明,如果運(yùn)行的系統(tǒng)不支持select(),MicroWindows則提供Poll()入口。    (3)鍵盤驅(qū)動(dòng)    MicroWindows提供兩個(gè)鍵盤驅(qū)動(dòng)程序:Kbd_tty.c適用于Linux和ELKS系統(tǒng),鍵盤被當(dāng)成文件描述符來讀寫;Kbd_bios.c用于

8、MSDOS真彩模式下,它是對(duì)PC BIOS進(jìn)行讀寫來對(duì)按鍵進(jìn)行操作。    1.3 MicroGUI獨(dú)立圖形設(shè)備引擎    MicroWindows的MicroGUI提供了對(duì)屏幕、鼠標(biāo)、鍵盤驅(qū)動(dòng)程序和硬件之間的接口。用戶應(yīng)用程序不能直接調(diào)用核心圖形引擎,但是可通過API函數(shù)來實(shí)現(xiàn)。核心程序在客戶機(jī)/服務(wù)器模型下常駐在服務(wù)器上,使用內(nèi)部的文本字體和位圖文本模式。此外,核心程序使用的是指針,這樣不用靠轉(zhuǎn)變成句柄來實(shí)現(xiàn)更多的復(fù)雜功能。    MicroWindows中的核心程序以G

9、dXXX()開頭,與之相連的是圖形輸出系統(tǒng)而不是窗口管理系統(tǒng)。此外,還控制所有的裁剪和顏色轉(zhuǎn)換功能。以下是組成MicroWindows核心模塊的文件:    dvdraw.c核心圖形程序,關(guān)于繪制線段、圓、多邊形及其填充,文本和位圖文件的繪制和顏色轉(zhuǎn)換;    devclip.c核心裁剪程序;    devrgn.c動(dòng)態(tài)分配程序;    devmouse.c鼠標(biāo)控制程序;    devkbd.c核

10、心鍵盤控制程序;    devpalX.c連接到系統(tǒng)調(diào)色板。    1.4 應(yīng)用程序接口    MicroWindows提供兩個(gè)應(yīng)用程序接口:MicroWindows API(源代碼在win*.c中)和Nano_XAPI(源代碼在nanox*.c中)    在MicroWidows上的API函數(shù)的基本模型都是用來初始化屏幕、鍵盤和鼠標(biāo)的驅(qū)動(dòng)程序,然后一直等待select()消息循環(huán)。當(dāng)事件發(fā)生時(shí),這條信息將送到用戶程序。如果是用戶請(qǐng)求圖

11、形操作,那參數(shù)將被編碼后送到適當(dāng)?shù)腉dXXX核心程序上。與原始圖形操作相對(duì)的窗口概念是被該層所控制的,也就是說該層的API函數(shù)定義了窗口及其對(duì)應(yīng)系統(tǒng)的概念。這樣,系統(tǒng)坐標(biāo)就能被轉(zhuǎn)成屏幕上顯示的坐標(biāo),并且可將數(shù)據(jù)傳給GdXXX核心程序,由其作實(shí)際操作。該層亦定義圖形/顯示文件,并且會(huì)將此信息包括裁減信息送到核心程序上。    MicroWindows API支持大多數(shù)圖形繪制、裁減、窗口工具條繪制以及拖拉窗口等這些程序。Nano_x API以mini-X服務(wù)器基礎(chǔ),類似于X的一個(gè)API,沿用X Window中的Xlib API,命名都是GrXXX()而不是

12、X Windows中的X)。Nano-x API加入了基于網(wǎng)絡(luò)的客戶機(jī)/服務(wù)器功能,但是沒有實(shí)現(xiàn)窗口管理,所以對(duì)窗口的處理需要使用系統(tǒng)提供的一個(gè)插件(widget)集,或者完全由應(yīng)用程序員自已開發(fā)。    2 圖形引擎特性與實(shí)現(xiàn)    圖形引擎層的功能是完成圖形在實(shí)虛屏之間的轉(zhuǎn)換,以Gd.為開頭,并將指針傳給PSD作為它的首個(gè)參數(shù)。PSD參數(shù)將指定底層的顯示模式,例如設(shè)備的垂直和水平尺寸、硬件使用的顏色模式。另外,真正執(zhí)行畫圖的程序在這一層中作為功能指針使用。所有屏幕坐標(biāo)都是COORD類型。  

13、  顏色在圖形引擎中被指定RGB CILORVAL模式,然后被轉(zhuǎn)換成顏色指針,以PIXELVAL模式傳給顯示硬件,在32bpp(bit per pixel)真彩顯示器環(huán)境下不必轉(zhuǎn)換。    (1)區(qū)域    區(qū)域用來描述屏幕上像素點(diǎn)的分布。在MicroWindows中,區(qū)域是用一些無交迭的矩形組成的數(shù)組來描述的。目前實(shí)現(xiàn)區(qū)域有兩種方法,最初是用一個(gè)靜態(tài)數(shù)組CLIPRECTs來描述復(fù)雜區(qū)域。在這個(gè)數(shù)組中任一矩形中的點(diǎn)都被認(rèn)為是存在這個(gè)區(qū)域中的,另一個(gè)全局變量clipcount用來給這個(gè)數(shù)組中的矩形

14、計(jì)數(shù)。這個(gè)方法沒有給區(qū)域管理提供入口點(diǎn),所以整個(gè)數(shù)組的數(shù)據(jù)直接被送到負(fù)責(zé)裁剪功能的函數(shù)數(shù)口。新方法則可以創(chuàng)建任何數(shù)目的區(qū)域。用來描述區(qū)域的數(shù)組CLIPREGION被定義成動(dòng)態(tài)數(shù)據(jù)組,可動(dòng)態(tài)分配它所包含矩形的數(shù)量,這樣那些無交迭的矩形被存放在“y-x”類型的隊(duì)列中。在同一隊(duì)列中,所有矩形的垂直高度y是一樣的,這意味著在每個(gè)隊(duì)列中只有矩形的寬度可變。實(shí)際程序是利用Intersection、Union、Subtraction、Exclusive OR等方法來實(shí)現(xiàn)創(chuàng)建、刪除一個(gè)區(qū)域或者是將幾個(gè)區(qū)域或矩形合并。以下是這種方法設(shè)計(jì)的幾個(gè)函數(shù)。    GdAllocR

15、egion 創(chuàng)建一個(gè)區(qū)域    GdDestroyRegion 刪除一個(gè)區(qū)域    GdCopyRegion 復(fù)制區(qū)域    GdUnionRectWithRegion 將一個(gè)矩形和一個(gè)區(qū)域合并    GdIntersectRegion 在兩個(gè)區(qū)域的交集處創(chuàng)建一個(gè)新區(qū)域    GdSubtractRegion 在兩個(gè)區(qū)域的差集處創(chuàng)建一個(gè)新區(qū)域    GdUn

16、ionRegion 在兩個(gè)區(qū)域的并集創(chuàng)建一個(gè)新區(qū)域    GdXorRegion    (2)裁剪    圖形引擎中有一個(gè)由圖形操作定義的由一些矩形組成的裁剪區(qū),如果點(diǎn)被包含在這些裁減區(qū)內(nèi)就會(huì)被繪制出來。有兩個(gè)裁剪算法:devclipl.c針對(duì)靜態(tài)矩形數(shù)組,devclipc2.c針對(duì)新的動(dòng)態(tài)數(shù)組。GdSetClipRects是唯一刪除區(qū)域并指定后來的圖形操作的入口點(diǎn)。所有的繪圖程序都要調(diào)用兩個(gè)附加程序來決定是否畫圖。GdClipPoint獲取屏幕坐標(biāo)的(x,y)點(diǎn),如果該點(diǎn)被

17、繪制出來的話,則返回TRUE。GdClipArea獲取屏幕上方最左的或者下方最右的點(diǎn)并回以下值:CLIP_VISIBLE(指定區(qū)域在原區(qū)域內(nèi))、CLIP_INVISIBLE(指定區(qū)域不在原區(qū)域內(nèi))、CLIP_PARTIAL(指定區(qū)域部分在原區(qū)域內(nèi))。    (3)畫線    MicroWindows使用GdPoint畫點(diǎn),GdLine畫線。畫線時(shí)使用當(dāng)前的前景色(DgSetForeground指定)。有兩種繪制模式:MODE_SET和MODE_COR。    (4)矩形、圓和

18、橢圓以及多邊形    矩形、圓和橢圓的繪制分別調(diào)用GdRect和GdEllipse來實(shí)現(xiàn)。MicroWindows中定義了一個(gè)包含(x,y)多邊形頂點(diǎn)的數(shù)組來表示多邊形,調(diào)用GdLine函數(shù)畫線,把這些點(diǎn)相連就可以實(shí)現(xiàn)畫多邊形。繪制時(shí)使用前景色。    (5)區(qū)域填充    MicroWindows中使用GdFillRect函數(shù)填充矩形區(qū)域,填充使用前景色。填充圓和橢圓使用GdFillEillpse函數(shù),填充多邊形使用GdFillPoly函數(shù)。填充的實(shí)現(xiàn)是在屏幕驅(qū)動(dòng)中不斷地調(diào)

19、用GrawHorzLine函數(shù)。    (6)字體和文本輸出    MicroWindows支持可變/不可變字體。文本輸出時(shí)使用GdSetFont定義輸出使用的字體,再調(diào)用GdText函數(shù)輸出。    (7)顏色模式和調(diào)色板    MicroWindows支持RGB顏色,顏色匹配,真彩和調(diào)色板顯示,3D效果的顯示。    (8)圖片繪制    MicroWi

20、ndows支持兩種格式的圖片。單色圖片用IMAGEBITS結(jié)構(gòu)(1表示前景色,0表示背景色)來定義,繪制時(shí)調(diào)用GdBitmap程序。彩色圖片可以分別定義為1、4、8 bpp的模式,用IMAGEHDR結(jié)構(gòu)來表示。繪制時(shí)調(diào)用GdDrawImage函數(shù)。    (9)映射    映射功能在實(shí)虛屏的轉(zhuǎn)換中使用。GdBlit可以實(shí)現(xiàn)上層的API將虛擬內(nèi)存存復(fù)制到顯示屏上,復(fù)制時(shí)調(diào)用GdBlit函數(shù)。    3 MicroWindows API   

21、0;MicroWindows API中的基本通信機(jī)制是消息機(jī)制。一個(gè)消息機(jī)制中包含了message number和兩個(gè)參數(shù):wParam、lParam。Message被存放在應(yīng)用程序的message-queue中,GetMessage函數(shù)將其取出。WM_GHAR針對(duì)鍵盤輸入,WM_LBUTTONDOWN針對(duì)鼠標(biāo)鍵被按下。窗口創(chuàng)建時(shí)使用WMCREATE,刪除時(shí)使用WM_DESTROY。DispatchMessage將消息傳到處理程序的窗口。    以下是處理消息的有關(guān)函數(shù):    SendMessage 將消息傳到窗

22、口    PostMessage 將消息傳到消息隊(duì)列    PostQuitMessage 傳遞WM_QUIT消息到消息隊(duì)列讀時(shí)中斷程序    GetMessage 得到消息后結(jié)束中斷    TranslateMessage 將按鍵按下/彈起的消息傳到WMCAR    DispatchMessage 將消息傳到為它分配的窗口程序    3.2 窗口的創(chuàng)建和刪

23、除    RegisterClass 定義新的窗口類型并啟動(dòng)窗口程序    UnRegisterClass 刪除窗口類型    CreateWindowsEx 按窗口類型創(chuàng)建一個(gè)窗口    DeatroyWindow 刪除一個(gè)窗口    窗口創(chuàng)建后產(chǎn)生WM_CREATE消息,刪除產(chǎn)生WM_DESTROY消息。    3.3 窗口的顯示、隱藏和移動(dòng) 

24、   ShowWindow函數(shù)指定窗口是否可見。MoveWindow改變窗口的位置和大小。窗口位置改變時(shí),產(chǎn)生WM_MOVE消息;窗口大小改變時(shí),產(chǎn)生WM_SIZE消息。       這篇MicroWindows體系結(jié)構(gòu)及應(yīng)用程序接口的關(guān)鍵詞是Mi,ic,cr,ro,oW,Wi,in,nd,do,ow,ws,s體,體系,系結(jié),結(jié)構(gòu),構(gòu)及,及應(yīng),應(yīng)用,用程,程序,序接,接口,口,           

25、;  3.4 窗口的繪制    窗口繪制時(shí)產(chǎn)生WM_PAINT消息。窗口的標(biāo)題欄自動(dòng)繪制,設(shè)置屬性使用SetWinowText,察看屬性使用GetWindowText。    (1)實(shí)虛屏切換    窗口繪制使用的坐標(biāo)系統(tǒng)是屏幕上的絕對(duì)坐標(biāo)系,MicroWindows API使用的是相對(duì)坐標(biāo)系。GetClientRect和GetWindowRect函數(shù)各自返回虛屏和實(shí)屏的坐標(biāo)值。    (2)Device Contexts&#

26、160;   調(diào)用圖形API之間要包含device context。它指定系統(tǒng)所使用的窗口和坐標(biāo)系,同時(shí)還定義系統(tǒng)默認(rèn)的前景色和背景色。    GetDC用來包含device context。在畫標(biāo)題欄還需調(diào)用GetWindowDC。GetDCEx定義子/兄弟窗口的裁剪操作。繪制結(jié)束時(shí)調(diào)用ReleaseDC釋放DC。    (3)圖形API    見網(wǎng)絡(luò)補(bǔ)充版()    3.5 其它實(shí)用函數(shù) &#

27、160;  WndSetDesktopWallpaper 設(shè)置桌面的背景圖片    WndSetCursor 為窗口創(chuàng)建光標(biāo)    WndRaiseWindow 拉伸窗口    WndLowerWindow 縮小窗口    WndGetTopWindow 返回最上層窗口的句柄    Sleep 睡眠    (1)設(shè)置窗口中心 &

28、#160;  WM_SETFOCUS和WMKILLFOCUS分別用于獲取/刪除中心。GetActiveWindow返回ancestor窗口,GetDesktopWINDOW返回當(dāng)前桌面窗口的句柄。    (2)鼠標(biāo)捕獲    WM_MOUSEMOVE用來表示鼠標(biāo)被移動(dòng)。SetCapture獲取全部的鼠標(biāo)移動(dòng)信息,ReleaseCapture返回到程序,GetCaptrue返回到捕獲區(qū)域。    (3)區(qū)域管理    SetRect 定義一個(gè)矩形結(jié)構(gòu)    SetRectEmpty 定義一個(gè)空矩形    CopyRect 復(fù)制一個(gè)矩形  

溫馨提示

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

評(píng)論

0/150

提交評(píng)論