基于跨平臺下的嵌入式GUl人機界面系統研究與設計
窗口的管理需要每一個(gè)窗口有3個(gè)基本的鏈:子窗口→children;父窗口→parent;兄弟窗口→sibling,其中,rootwp窗口是GUI初始化時(shí)創(chuàng )建的根窗口。根窗口的子窗口一般是POPU窗口或沒(méi)有Child屬性的OVERLAPPEDWINDOW;每個(gè)AP或線(xiàn)程可以有多個(gè)這樣的窗口。創(chuàng )建窗口前,必須注冊窗口類(lèi);窗口類(lèi)是一種具有相同屬性或動(dòng)作的窗口的集合,相當于某一類(lèi)窗口的橫板,這類(lèi)窗口具有相同的窗口過(guò)程、窗口背景、基本風(fēng)格等,屬于同一個(gè)線(xiàn)程(WIN32是實(shí)例)。所有的窗口都是某一窗口類(lèi)的一個(gè)實(shí)例。窗口類(lèi)以名字作為ID,但是不同的進(jìn)程可以擁有相同名字的窗口類(lèi)。
消息的傳遞機制需要在GUI初始化時(shí)創(chuàng )建一個(gè)優(yōu)先級別很高的后臺服務(wù)線(xiàn)程,專(zhuān)門(mén)從事消息獲取與派發(fā)。沒(méi)有任何消息時(shí),該線(xiàn)程掛起。一旦驅動(dòng)層有任何消息觸發(fā),都將恢復該線(xiàn)程,進(jìn)入驅動(dòng)消息查詢(xún)。然后將查詢(xún)到的消息經(jīng)過(guò)轉換后,或者轉發(fā)到桌面,或者直接發(fā)送給指定窗口。以筆點(diǎn)點(diǎn)擊為例:Micro Window將筆點(diǎn)消息解釋為鼠標消息,對應鼠標的左鍵。產(chǎn)生的消息有:WM_MOVE,WM_LBUTTONDOWN,WM_ LB UTTONUP,WM_LBUTTONDBCLK,WM_NCLBUTTONDOWN,WM_NCILBUTTONUP,WM_LBUTTONDBCLK等。筆點(diǎn)時(shí)產(chǎn)生Touchpannel中斷,經(jīng)過(guò)Driver層處理后,將喚醒GUl后臺線(xiàn)程,后者從Driver層獲取筆點(diǎn)的消息和坐標,結合上一次的筆點(diǎn)座標信息,生成一定的鼠標消息;根據坐標,在窗口鏈中查找筆點(diǎn)所在的窗口;如果有捕獲窗口,直接發(fā)給此窗口。如果是系統消息,則直接發(fā)給桌面。如充電、插入USB等消息。
絕大多數的圖形設備接口(GDI)函數都是基于DC的。DC是一種圖形設備上下文環(huán)境。它集成了當前繪制操作的所有信息,包括輸出的屏幕設備、字體、筆的屬性、光柵特點(diǎn)等。在繪制操作之前必須得到設備上下文。而且在得到DC的期間,不能阻塞。否則容易造成死鎖。獲取DC的方式有3種:
(1)GetDC:獲取客戶(hù)區DC,限于在客戶(hù)區的繪制操作;
(2)GetWindowDC:獲取屏幕DC,可以在客戶(hù)區和標題區繪制操作;
(3)BeginPaint:獲取客戶(hù)區DC,限于且推薦在WM_PAINT消息中調用。
MicroWindow不保存用戶(hù)區的繪制內容,需要更新時(shí),只會(huì )發(fā)送WM-PAINT消息;所以比較標準的做法是將圖形繪制操作全部放進(jìn)WM_PAINT中去,采用BeginPaint獲取DC。
內存設備上下文(MemoryDC)是一種虛擬的圖形設備上下文環(huán)境,也就是所謂的虛屏。有時(shí)為了避免屏幕閃爍感,把不連續的圖形內容繪制到MemoryDC中,然后統一繪制到真正的屏幕設備上去;有助于提高畫(huà)面的連續性和完整性,下面是使用MemoryDC繪制位圖并疊加文字的例子:

系統數據資源采用VC的Resource標準數據格式,主要應用在3類(lèi):系統資源、公共資源、應用程序私有的資源。資源內容包括位圖、ICO-N、String、對話(huà)框、BIN數據等。在VC中需要事先做好所需的資源,生成資源數據.res和資源頭文件resource.h。在不同的平臺中,資源數據在物理介質(zhì)中的存放方式不同,但AP訪(fǎng)問(wèn)資源的方式可以相同。系統平臺同時(shí)還支持應用程序顯式加載資源的方式。對話(huà)框提供了一種簡(jiǎn)化Window編碼工作的機會(huì )。也就是提供了一種創(chuàng )建多個(gè)窗口的模板,用戶(hù)可以填寫(xiě)對話(huà)框中的子窗口或控件的相關(guān)信息,或者從資源文件中裝載對話(huà)框,系統會(huì )提取其中的信息,為用戶(hù)一一創(chuàng )建相應的窗口。它分為兩類(lèi):模態(tài)對話(huà)框和非模態(tài)對話(huà)框。差別在于模態(tài)對話(huà)框有自己的消息循環(huán)。
應用程序的編譯和連接方式依賴(lài)于具體的硬件開(kāi)發(fā)平臺。就移動(dòng)終端而言,CPU若采用ARM7系列,編譯工具使用ADS,應用程序和操作系統集成在一起編譯。需要注意的是C文件采用thumb模式,而ASM文件采用的是ARM模式。而Linux平臺下應用程序的編譯連接是獨立完成的,最終生成exe文件,然后在打包成pak文件下載到硬件板中。
2 結語(yǔ)
由于移動(dòng)終端的應用越來(lái)越廣泛,而嵌入式GUI系統是一項復雜的軟件工程,因此研究和設計的GUI占用資源少、可配置,特別適用于移動(dòng)終端。它給終端上層應用提供了一個(gè)清晰的圖形界面。同時(shí),在將它用于多種終端平臺時(shí)還需要盡可能考慮其可擴展性、兼容性、可移植性等屬性。為后繼終端軟件應用開(kāi)發(fā)建立了良好的開(kāi)發(fā)基礎,性能優(yōu)越且易于移植,已經(jīng)成功應用于Linux和Windows CE等嵌入式操作系統的無(wú)線(xiàn)移動(dòng)多媒體終端項目中,效果理想。由于限于篇幅,不再贅述。本文引用地址:http://dyxdggzs.com/article/151462.htm linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論