<form id="itnzz"><noscript id="itnzz"></noscript></form>

          1. <menuitem id="itnzz"></menuitem>
          2. 成人午夜激情在线观看,国产精品一线天粉嫩av,99精品国产综合久久久久五月天 ,一卡2卡三卡4卡免费网站,国产高清在线男人的天堂,五月天国产成人AV免费观看,67194熟妇在线观看线路,成人无码潮喷在线观看
            現在位置:范文先生網>理工論文>電子通信論文>MicroWindows體系結構及應用程序接口

            MicroWindows體系結構及應用程序接口

            時間:2023-02-20 23:43:29 電子通信論文 我要投稿
            • 相關推薦

            MicroWindows體系結構及應用程序接口

            摘要:MicroWindows是一個著名的開放源碼的嵌入式GUI軟件。本文簡要論述了MicroWindows的體系結構和應用程序接口,并介紹其設備驅動特性、API、客戶機/服務器模型和畫圖機制。

                關鍵詞:MicroWindows API Nano-X 圖形用戶界面

            許多開發者在嵌入式設計中開始使用類似于桌面的操作系統。其中一個方案就是Linux操作系統。由于Linux在嵌入式系統上具有桌面電腦的全部功能和特性,作為一種免費的開放源碼,它允許修改和根據用戶的要求進行定制。

            MicroWindows是一個開放源碼的嵌入式GUI軟件,目的是把圖形視窗環境引入到運行Linux的小型設備和平臺上。作為X Window系統的替代品,MicroWindows可以用更少的RAM和文件存儲空間(100KB~600KB)提供相似的功能,允許設計得輕松加入各種顯示設備、鼠標、觸摸屏和鍵盤等;可移植性非常好,可用C語言實現;支持Intel 16位/32位CPU、MIPS R4000以及基于ARM內核的處理器芯片。

            1 體系結構

            1.1 分層結構設計

            MicroWindows采用分層結構設計方法,在底層提供對屏幕、鼠標、觸摸屏和鍵盤的驅動,在程序能訪問實際的硬件設備和其它用戶定制設備。在中間層有一個可移植圖形引擎,提供繪制線程、區域填充、繪制多邊形、裁減和使用顏色模式的方法。在頂層實現多種API以適應不同的應用環境。目前,MicroWindows中使用兩種流行的圖形編程接口:Microsoft Windows Win32/WinCE圖形顯示接口(GDI)和Xlib接口。前者應用于所有的Windows CE和Win32應用程序;后者就像Nano-X,應用于所有Linux X插件集的最底層,這樣可讓Linux圖形程序員X接口開發圖形應用程序。

            1.2 驅動設備

            device.h文件中定義設備驅動接口。MicroWindows已實現至少將一個屏幕、鼠標和鍵盤的驅動與系統相連。獨立圖形設備引擎的中間層可以使驅動設備直接完成對硬件的具體操作。

            (1)屏幕驅動

            MicroWindows可運行在支持Framebuffer的32位Linux系統上,也可使用SVGALib[45]庫來進行圖形顯示。此外,還被移植到16位的ELKS和實模式的MSDOS上,實現1、2、4、8、16和32位的像素支持,以及實現VGA16平面模式支持。它的圖形引擎能夠運行在任何支持readpixel、writepixel、drawhorzline、drawvertline和setpalette的系統之上。如果底層驅動系統實現了Blitting,則上層可提供更多的增強功能。在底層函數的支持之下,上層實現了對位圖、字體、光標以及顏色的支持。除了基于調色板的1、2、4和8位像素模式,也實現15、16和32位像素的真彩模式。

            (2)鼠標驅動

            MicroWindows有三個鼠標驅動程序。GPM驅動程序mou_gpm.c支持Linux系統,串口鼠標驅動程序mou_ser.c支持Linux和ELKS系統,int33驅動程序mou_dos.c支持MSDOS系統。鼠標驅動程序的基本功能,是將鼠標中的數據編碼,然后返回關于鼠標位置和按鍵的相對或絕對數據。

            在Linux下,MicroWindows的主循環是select()聲明,如果運行的系統不支持select(),MicroWindows則提供Poll()入口。

            (3)鍵盤驅動

            MicroWindows提供兩個鍵盤驅動程序:Kbd_tty.c適用于Linux和ELKS系統,鍵盤被當成文件描述符來讀寫;Kbd_bios.c用于MSDOS真彩模式下,它是對PC BIOS進行讀寫來對按鍵進行操作。

            1.3 MicroGUI——獨立圖形設備引擎

            MicroWindows的MicroGUI提供了對屏幕、鼠標、鍵盤驅動程序和硬件之間的接口。用戶應用程序不能直接調用核心圖形引擎,但是可通過API函數來實現。核心程序在客戶機/服務器模型下常駐在服務器上,使用內部的文本字體和位圖文本模式。此外,核心程序使用的是指針,這樣不用靠轉變成句柄來實現更多的復雜功能。

            MicroWindows中的核心程序以GdXXX()開頭,與之相連的是圖形輸出系統而不是窗口管理系統。此外,還控制所有的裁剪和顏色轉換功能。以下是組成MicroWindows核心模塊的文件:

            dvdraw.c——核心圖形程序,關于繪制線段、圓、多邊形及其填充,文本和位圖文件的繪制和顏色轉換;

            devclip.c——核心裁剪程序;

            devrgn.c——動態分配程序;

            devmouse.c——鼠標控制程序;

            devkbd.c——核心鍵盤控制程序;

            devpalX.c——連接到系統調色板。

            1.4 應用程序接口

            MicroWindows提供兩個應用程序接口:MicroWindows API(源代碼在win*.c中)和Nano_XAPI(源代碼在nanox*.c中)

            在MicroWidows上的API函數的基本模型都是用來初始化屏幕、鍵盤和鼠標的驅動程序,然后一直等待select()消息循環。當事件發生時,這條信息將送到用戶程序。如果是用戶請求圖形操作,那參數將被編碼后送到適當的GdXXX核心程序上。與原始圖形操作相對的窗口概念是被該層所控制的,也就是說該層的API函數定義了窗口及其對應系統的概念。這樣,系統坐標就能被轉成屏幕上顯示的坐標,并且可將數據傳給GdXXX核心程序,由其作實際操作。該層亦定義圖形/顯示文件,并且會將此信息包括裁減信息送到核心程序上。

            MicroWindows API支持大多數圖形繪制、裁減、窗口工具條繪制以及拖拉窗口等這些程序。Nano_x API以mini-X服務器基礎,類似于X的一個API,沿用X Window中的Xlib API,命名都是GrXXX()而不是X Windows中的X)。Nano-x API加入了基于網絡的客戶機/服務器功能,但是沒有實現窗口管理,所以對窗口的處理需要使用系統提供的一個插件(widget)集,或者完全由應用程序員自已開發。

            2 圖形引擎特性與實現

            圖形引擎層的功能是完成圖形在實虛屏之間的轉換,以Gd...為開頭,并將指針傳給PSD作為它的首個參數。PSD參數將指定底層的顯示模式,例如設備的垂直和水平尺寸、硬件使用的顏色模式。另外,真正執行畫圖的程序在這一層中作為功能指針使用。所有屏幕坐標都是COORD類型。

            顏色在圖形引擎中被指定RGB CILORVAL模式,然后被轉換成顏色指針,以PIXELVAL模式傳給顯示硬件,在32bpp(bit per pixel)真彩顯示器環境下不必轉換。

            (1)區域

            區域用來描述屏幕上像素點的分布。在MicroWindows中,區域是用一些無交迭的矩形組成的數組來描述的。目前實現區域有兩種方法,最初是用一個靜態數組CLIPRECTs來描述復雜區域。在這個數組中任一矩形中的點都被認為是存在這個區域中的,另一個全局變量clipcount用來給這個數組中的矩形計數。這個方法沒有給區域管理提供入口點,所以整個數組的數據直接被送到負責裁剪功能的函數數口。新方法則可以創建任何數目的區域。用來描述區域的數組CLIPREGION被定義成動態數據組,可動態分配它所包含矩形的數量,這樣那些無交迭的矩形被存放在“y-x”類型的隊列中。在同一隊列中,所有矩形的垂直高度y是一樣的,這意味著在每個隊列中只有矩形的寬度可變。實際程序是利用Intersection、Union、Subtraction、Exclusive OR等方法來實現創建、刪除一個區域或者是將幾個區域或矩形合并。以下是這種方法設計的幾個函數。

            GdAllocRegion 創建一個區域

            GdDestroyRegion 刪除一個區域

            GdCopyRegion 復制區域

            GdUnionRectWithRegion 將一個矩形和一個區域合并

            GdIntersectRegion 在兩個區域的交集處創建一個新區域

            GdSubtractRegion 在兩個區域的差集處創建一個新區域

            GdUnionRegion 在兩個區域的并集創建一個新區域

            GdXorRegion

            (2)裁剪

            圖形引擎中有一個由圖形操作定義的由一些矩形組成的裁剪區,如果點被包含在這些裁減區內就會被繪制出來。有兩個裁剪算法:devclipl.c針對靜態矩形數組,devclipc2.c針對新的動態數組。GdSetClipRects是唯一刪除區域并指定后來的圖形操作的入口點。所有的繪圖程序都要調用兩個附加程序來決定是否畫圖。GdClipPoint獲取屏幕坐標的(x,y)點,如果該點被繪制出來的話,則返回TRUE。GdClipArea獲取屏幕上方最左的或者下方最右的點并回以下值:CLIP_VISIBLE(指定區域在原區域內)、CLIP_INVISIBLE(指定區域不在原區域內)、CLIP_PARTIAL(指定區域部分在原區域內)。

            (3)畫線

            MicroWindows使用GdPoint畫點,GdLine畫線。畫線時使用當前的前景色(DgSetForeground指定)。有兩種繪制模式:MODE_SET和MODE_COR。

            (4)矩形、圓和橢圓以及多邊形

            矩形、圓和橢圓的繪制分別調用GdRect和GdEllipse來實現。MicroWindows中定義了一個包含(x,y)多邊形頂點的數組來表示多邊形,調用GdLine函數畫線,把這些點相連就可以實現畫多邊形。繪制時使用前景色。

            (5)區域填充

            MicroWindows中使用GdFillRect函數填充矩形區域,填充使用前景色。填充圓和橢圓使用GdFillEillpse函數,填充多邊形使用GdFillPoly函數。填充的實現是在屏幕驅動中不斷地調用GrawHorzLine函數。

            (6)字體和文本輸出

            MicroWindows支持可變/不可變字體。文本輸出時使用GdSetFont定義輸出使用的字體,再調用GdText函數輸出。

            (7)顏色模式和調色板

            MicroWindows支持RGB顏色,顏色匹配,真彩和調色板顯示,3D效果的顯示。

            (8)圖片繪制

            MicroWindows支持兩種格式的圖片。單色圖片用IMAGEBITS結構(1表示前景色,0表示背景色)來定義,繪制時調用GdBitmap程序。彩色圖片可以分別定義為1、4、8 bpp的模式,用IMAGEHDR結構來表示。繪制時調用GdDrawImage函數。

            (9)映射

            映射功能在實虛屏的轉換中使用。GdBlit可以實現上層的API將虛擬內存存復制到顯示屏上,復制時調用GdBlit函數。

            3 MicroWindows API

            MicroWindows API中的基本通信機制是消息機制。一個消息機制中包含了message number和兩個參數:wParam、lParam。Message被存放在應用程序的message-queue中,GetMessage函數將其取出。WM_GHAR針對鍵盤輸入,WM_LBUTTONDOWN針對鼠標鍵被按下。窗口創建時使用WMCREATE,刪除時使用WM_DESTROY。DispatchMessage將消息傳到處理程序的窗口。

            以下是處理消息的有關函數:

            SendMessage 將消息傳到窗口

            PostMessage 將消息傳到消息隊列

            PostQuitMessage 傳遞WM_QUIT消息到消息隊列讀時中斷程序

            GetMessage 得到消息后結束中斷

            TranslateMessage 將按鍵按下/彈起的消息傳到WMCAR

            DispatchMessage 將消息傳到為它分配的窗口程序

            3.2 窗口的創建和刪除

            RegisterClass 定義新的窗口類型并啟動窗口程序

            UnRegisterClass 刪除窗口類型

            CreateWindowsEx 按窗口類型創建一個窗口

            DeatroyWindow 刪除一個窗口

            窗口創建后產生WM_CREATE消息,刪除產生WM_DESTROY消息。

            3.3 窗口的顯示、隱藏和移動

            ShowWindow函數指定窗口是否可見。MoveWindow改變窗口的位置和大小。窗口位置改變時,產生WM_MOVE消息;窗口大小改變時,產生WM_SIZE消息。

            3.4 窗口的繪制

            窗口繪制時產生WM_PAINT消息。窗口的標題欄自動繪制,設置屬性使用SetWinowText,察看屬性使用GetWindowText。

            (1)實虛屏切換

            窗口繪制使用的坐標系統是屏幕上的絕對坐標系,MicroWindows API使用的是相對坐標系。GetClientRect和GetWindowRect函數各自返回虛屏和實屏的坐標值。

            (2)Device Contexts

            調用圖形API之間要包含device context。它指定系統所使用的窗口和坐標系,同時還定義系統默認的前景色和背景色。

            GetDC用來包含device context。在畫標題欄還需調用GetWindowDC。GetDCEx定義子/兄弟窗口的裁剪操作。繪制結束時調用ReleaseDC釋放DC。

            (3)圖形API

            見網絡補充版(http://www.ycxgx.cn收集整理)

            3.5 其它實用函數

            WndSetDesktopWallpaper 設置桌面的背景圖片

            WndSetCursor 為窗口創建光標

            WndRaiseWindow 拉伸窗口

            WndLowerWindow 縮小窗口

            WndGetTopWindow 返回最上層窗口的句柄

            Sleep 睡眠

            (1)設置窗口中心

            WM_SETFOCUS和WMKILLFOCUS分別用于獲取/刪除中心。GetActiveWindow返回ancestor窗口,GetDesktopWINDOW返回當前桌面窗口的句柄。

            (2)鼠標捕獲

            WM_MOUSEMOVE用來表示鼠標被移動。SetCapture獲取全部的鼠標移動信息,ReleaseCapture返回到程序,GetCaptrue返回到捕獲區域。

            (3)區域管理

            SetRect 定義一個矩形結構

            SetRectEmpty 定義一個空矩形

            CopyRect 復制一個矩形

            IsRectEmpty 為空矩形時返回TRUE

            InflateRect 放大矩形

            OffsetRect 移動矩形

            PtInRect 判斷點是否在矩形區內

            4 Nano-X API

            (1)Client/Server模型

            Nano-X允許應用程序使用Client/Server網絡協議或本地UNIX Domain Socket,可讓幾個應用程序運行在嵌入式設備或遠端主機上,并連接到Server上顯示出來。

            (2)窗口的創建和刪除

            Nan0-X中使用GrNewWindow創建窗口。GrNewInputWindow定義窗口只允許用來輸入。函數定義了窗口的邊界和顏色。

            (3)窗口的顯示、隱藏和移動

            GrMapWindow用來顯示窗口,GrUnmapWindow用來隱藏,GrRaiseWindow用來拉伸,GrLowerWindow用來縮小,GrMoveWindow用來移動,GrResizeWindow用來改變窗口大小。

            (4)窗口中的繪制

            ①Graphics Context。GrNewGC用來分配graphics Context,刪除時使用GrDestroyGC,GrCopyGC用來復制。創建一個Graphics Context后,服務器返回一個Graphics Context的ID,用來作為API的參數。GC中不存放裁剪區和系統坐標系。

            ②繪圖API。見補充版(http://www.ycxgx.cn收集整理)。


            【MicroWindows體系結構及應用程序接口】相關文章:

            嵌入式Linux系統下Microwindows的應用08-06

            基于B/S體系結構開發應用系統08-06

            基于B/S體系結構開發應用系統08-06

            數字圖書館體系結構的發展08-05

            公共行政體系結構的哲學解讀08-06

            防火墻技術及其體系結構研究08-06

            中國法律史學科體系結構的幾個問題08-05

            軟件無線電的開放式軟件通信體系結構08-06

            一種基于B/S結構與C/S結構結合的新體系結構08-06

            主站蜘蛛池模板: 免费的特黄特色大片| 欧美gv在线| 高清欧美精品一区二区三区| 亚洲一区二区三区激情在线| 欧美videos粗暴| 中年国产丰满熟女乱子正在播放| 国产精品一区高清在线观看| 国产亚洲无线码一区二区| 国产丰满乱子伦无码专区| 国产成人一区二区三区视频在线| 国产午夜福利在线观看播放| 国产农村激情免费专区| 99久久机热/这里只有精品| 无码人妻丝袜在线视频| 久久久久亚洲av成人网址| 亚洲 制服 丝袜 无码| av天堂精品久久久久| 国产精品天干天干综合网| 久久精品国产亚洲av热九九热 | 国产精品区在线和狗狗| 亚洲综合久久精品国产高清| 国产精品久久欧美久久一区| 人人妻人人澡人人爽人人精品av | 免费人成网站视频在线观看国内 | 口爆少妇在线视频免费观看| 亚洲av第二区国产精品| 亚洲熟妇色xxxxx亚洲| 大地资源中文在线观看西瓜| 中美日韩在线一区黄色大片| 国产精品午夜福利91| 国产精品深夜福利免费观看| 大伊香蕉精品视频在线| 精品国产一区二区三区在线观看 | 亚洲AV成人无码久久精品| 人人入人人爱| 久久人妻av一区二区软件| 国产老熟女国语免费视频| 激情综合色综合啪啪开心| 国产亚洲欧洲三级片A级| 精品国产一区二区三区大| 东京热一区二区三区在线|