国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于VxWorks的人機界面圖形開發(fā)系統(tǒng)設計

2011-07-16 07:37劉東濤
指揮控制與仿真 2011年4期
關鍵詞:管理器輸入法控件

劉東濤,肖 峰

(1. 海軍駐426廠軍事代表室,遼寧 大連 116015;2. 江蘇自動化研究所,江蘇 連云港 222006)

1 嵌入式人機界面開發(fā)面臨的問題

VxWorks操作系統(tǒng)是美國WindRiver公司于1983年設計開發(fā)的一種嵌入式實時操作系統(tǒng),是嵌入式開發(fā)平臺的關鍵組成部分[1]。它以其良好的可靠性和卓越的實時性被廣泛地應用于通信、軍事、航空、航天等對實時性要求極高的領域中。

隨著VxWorks的應用群體不斷擴大,應用范圍不斷拓廣,用戶的需求也在不斷提高,很多應用系統(tǒng)已經(jīng)不再局限于無界面、無交互的方式。越來越多的用戶要求提供高性能、高可靠的圖形用戶界面支撐系統(tǒng)。而圖形化界面開發(fā)恰恰是VxWorks的弱點,國外對嵌入式圖形系統(tǒng)的研究起步較早,在國內(nèi)占據(jù)了大部分市場,處于壟斷地位,如WindRive公司的Tilcon。但是Tilcon存在的缺點是中文支持度不好,不支持中文輸入功能[2]。國內(nèi)在圖形開發(fā)環(huán)境方面起步比較晚,在這方面的研究主要是基于VxWorks的圖形中間件軟件包──WindML進行二次開發(fā)[3]。在WindML基礎上自行開發(fā)圖形相關的功能函數(shù),利用這種手段編寫的程序無法將顯示邏輯和數(shù)據(jù)處理邏輯劃分開來,界面開發(fā)工作量大,導致代碼重復,維護成本較高。作為操作系統(tǒng)和應用程序之間的中間件──飛漫公司的MiniGUI已經(jīng)取得一定的成果,但MiniGUI的窗口管理器沒有完全基于WindML窗口管理器,不能完全兼容WindML(VxWorks標準的圖形開發(fā)庫),使得MiniGUI在VxWorks上應用受到限制。針對這種情況,本文在VxWorks標準圖形庫WindML的基礎上提出了一種基于控件技術的人機界面圖形開發(fā)庫JARI-EGK的設計方法。

2 JARI-EGK層次框架

嵌入式系統(tǒng)往往是一種定制設備,有不同的硬件設備,各個系統(tǒng)對人機界面圖形庫要求各不相同,如有的系統(tǒng)只要求一些圖形功能,而有的系統(tǒng)則要求完備的圖形用戶界面開發(fā)庫支持,因此,嵌入式窗口系統(tǒng)必須層次化,方便配置和定制。

為了屏蔽人機界面圖形庫與不同硬件設備的關聯(lián),要求設計時就考慮分層次設計。如圖1所示,JARI-EGK建立在圖形抽象層(WindML)之上。WindML支持多媒體程序運行于嵌入式操作系統(tǒng),主要目的是用來提供基本的圖形、視頻和音頻技術,以及提供一個設計標準設備驅(qū)動程序框架。WindML包含兩個組件——軟件開發(fā)包(SDK)和驅(qū)動程序(DDK),SDK組件用來開發(fā)應用程序,它提供了一個全面的API集[4],包括圖形、輸入處理、多媒體、字體和內(nèi)存管理,DDK組件是用來實現(xiàn)驅(qū)動程序的,它提供了一個完整的驅(qū)動程序參考集,包括硬件配置和API集,以便開發(fā)者能夠迅速地引導和應用自己的驅(qū)動程序[5]。在不同硬件平臺上運行時,只需通過適應性的底層作圖函數(shù)修改就能滿足JARI-EGK的需求。WindML 為操作系統(tǒng)提供一個基本的抽象層,JARI-EGK為更高一級的抽象,JARI-EGK中的抽象層可通過WindML將特定底層硬件的細節(jié)隱藏起來,而上層應用程序則無需關心底層的硬件平臺輸出和輸入設備,進而應用程序只關心自己的特定功能滿足要求就可以了。WindML屏蔽了JARI-EGK與硬件平臺之間的關系,使得JARI-EGK可方便地應用到不同的硬件環(huán)境中去。

圖1 JARI-EGK層次圖

3 JARI-EGK圖形開發(fā)系統(tǒng)設計

在JARI-EGK設計過程中,本文重點分析了窗口和控件關系、事件傳遞機制、窗口和控件狀態(tài)更新機制和中文輸入等問題。

3.1 窗口和控件類關系

在JARI-EGK的設計過程中,考慮到窗口、控件、控件組等關系,它們是有獨立也有聯(lián)系的各個錯綜復雜的關系的結(jié)合體。每個控件本身有共同的特點比如大小、位置、事件處理等,但是每個控件又有自己的不同行為,比如文本框、按鈕、TAB控件等,它們的外觀和事件處理方法都不相同,同時控件本身也存在父子關系,比如TAB控件包含幾頁,頁里面包含多少控件等,對于窗口也具有控件的某些特性、大小位置以及部分事件處理,整個JARI-EGK圖形系統(tǒng)應該具有組織、管理和查詢所有控件和窗口的能力[6],以及應用系統(tǒng)中包含多個窗口和控件,因而如何組織一個有效的數(shù)據(jù)結(jié)構(gòu)管理這些控件和窗口是十分必要的。綜合這些原因,在JARI-EGK圖形系統(tǒng)中采用面向?qū)ο蟮脑O計理念,面向?qū)ο笤O計主要優(yōu)點有:封裝性,繼承性,多態(tài)性。在設計過程中,為了增加代碼重用,建立一個良好的類關系,采用不同類來設計窗口以及各個控件。由于這些原因首先設計了四個主要的類Egk_Widget(控件基類)、Egk_Window(窗口類)、Egk_Group(控件組類)和Egk(全局類),其基本關系如圖2所示。

控件基類(Egk_Widget)包含了窗口和控件的基本信息,譬如長、寬等。JARI-EGK中的所有的控件、窗口和控件組都是由控件基類派生,控件基類來實現(xiàn)不同控件之間的相似功能,各控件的消息處理和回調(diào)都是由重載控件基類的函數(shù)來實現(xiàn)的的,從而可以讓每個屬于控件基類的控件均保持有相同的函數(shù),這就是面向?qū)ο蟮亩鄳B(tài)性。由于窗口等有可能包含有控件,所以添加了Egk_Group(控件組類),Egk_Group也繼承自控件基類,同時又有自己的屬性,Egk_Group設置鏈表可以添加、刪除、查詢控件基類指針。在控件基類的設計過程中添加變量來區(qū)分當前控件類型是窗口還是控件。

圖2 窗口、控件類基本關系圖

當創(chuàng)建窗口的時候,在Egk類這個全局靜態(tài)變量鏈表里面增加一個窗口類指針。窗口包含一個控件指針數(shù)組,控件指針數(shù)組的第一個指針指向窗口本身,余下的依次指向其它控件以及控件組,控件組又可以包含別的控件指針,也就是可以包含其它控件,結(jié)束時控件指針數(shù)組設置結(jié)束標志、整個窗口、控件、控件組形成一個整體。另外設計一個窗口鏈表類包含各個窗口信息,譬如窗口ID號等,當存在多個窗口時,窗口鏈表類依次增加,查詢方法是存在多個窗口,先從窗口查詢開始,接著遍歷窗口包含的控件組和控件,對于控件組再遍歷控件組包含的所有控件。

3.2 事件傳遞機制

控件和窗口采用了面向?qū)ο蟮脑O計理念, 事件傳遞通過重載控件基類的事件處理函數(shù)virtual int handle(int event)。外部消息,比如WindML底層事件(鼠標、鍵盤原始信息),首先發(fā)送給窗口[7]。這個由WindML窗口管理器處理。Egk類函數(shù)Egk::run()負責分發(fā)這些消息,根據(jù)窗口的ID號,發(fā)到相應的窗口類,窗口類里面的控件組成員變量包含了所有加載到本窗口的控件指針,窗口類遍歷控件指針,根據(jù)控件基類位置信息判斷給哪個控件發(fā)送信息,然后就發(fā)送給該控件,控件基類指針指向要選中的控件,這樣具體執(zhí)行事件處理函數(shù)就可以執(zhí)行消息響應了。比如當窗口接收到鼠標按下消息后,判斷位置在按鈕區(qū)域,然后執(zhí)行按鈕的事件處理函數(shù)handle來實現(xiàn)按鈕的響應。如果含有控件組那么傳給控件組,控件組再遍歷控件指針數(shù)組,根據(jù)控件基類位置信息判斷給確定控件發(fā)送消息,具體的那個控件再執(zhí)行相應的事件處理函數(shù),如圖3(a)所示。對相似控件事件處理也充分利用面向?qū)ο笾械睦^承和派生方法,通過對已有控件事件處理函數(shù)的繼承,既可以讓該控件繼承已有控件類的大部分處理行為,同時又具有自己的特殊行為。比如,一般的編輯框會接收所有的鍵盤輸入,當我們希望自己的編輯框只接收數(shù)字時,就可以用這種辦法屏蔽非數(shù)字的字符輸入。

圖3 JARI-EGK、WindML窗口信息處理對照圖

JARI-EGK的事件處理采用開放性的設計原則,能夠和WindML應用程序能夠無縫結(jié)合,如圖3(a)、圖3(b)所示。對于JARI-EGK應用程序和WindML應用程序,WindML窗口相關的窗口信息和窗口管理起都是一樣的,WindML窗口只和底層事件、窗口信息和窗口管理器相關,對于WindML窗口來說兩個是完全相同的處理流程,所以JARI-EGK應用程序和WINDML應用程序能夠完全兼容。

3.3 窗口和控件狀態(tài)更新機制

窗口控件的行為和窗口一樣,即能夠接收鍵盤和鼠標等外部輸入,也可以在自己的區(qū)域內(nèi)進行輸出,只是它們的所有活動被限制在主窗口中。當把控件和窗口都已經(jīng)創(chuàng)建完畢,接著就是循環(huán)等待各種外部事件。窗口和控件狀態(tài)更新實現(xiàn)機理如圖所示。設計的過程中我們在控件基類里添加一個變量_damage,當僅僅控件需要更新時,我們把控件的_damage變成EGK_DAMAGE_CHILD,同時也設置它所隸屬窗口的_damage值也為EGK_DAMAGE_CHILD,當控件需要更新時,發(fā)送消息告訴窗口需要更新但不是全部更新,Egk::run()循環(huán)檢測到窗口的更新信息只是更新控件,窗口類查詢控件每個控件更新信息后,直接調(diào)用控件的Draw函數(shù),更新控件,當整個窗口需要更新時,我們把窗口的_ damage變成EGK_DAMAGE_ALL這時窗口類更新整個窗口及其控件,這種更新機制保證了控件的及時有效的重繪。

圖4 窗口更新示意圖

3.4 中文輸入設計

JARI-EGK 的中文輸入是一個相對獨立的模塊(稱為 JARI-IME),完全內(nèi)嵌在WindML中,它實際是一個特殊的窗口。該窗口將在啟動之后,首先將自己注冊為輸入法窗口,輸入法窗口一直出現(xiàn)在各個窗口的頂層。鍵盤信息管理負責管理輸入法模塊、底層鍵盤信息、WindML窗口之間鍵盤信息傳遞,鍵盤信息管理根據(jù)WindML窗口根據(jù)輸入法狀態(tài)決定鍵盤信息發(fā)送給輸入法窗口還是WindML窗口。發(fā)送給輸入法窗口后[8],經(jīng)過輸入發(fā)模塊轉(zhuǎn)換成相應信息后再返回給WindML窗口,如圖5。當活動主窗口發(fā)生變化時,窗口管理器會通知輸入法窗口當前的活動窗口。這樣,當輸入法窗口接收到按鍵消息并且翻譯為適當?shù)淖址?,就可以將其發(fā)送到當前的活動窗口。

窗口管理器為輸入法窗口定義了如下消息,當活動窗口發(fā)生變化時,JARI-EGK會向 IME 窗口發(fā)送這些消息:

IME_EGK_ SEND:發(fā)送該消息到當前活動窗口;

IME_EGK_ OPEN:發(fā)送該消息到當前活動窗口,告訴當前活動窗口輸入法窗口已經(jīng)打開;

IME_EGK_CLOSE:發(fā)送該消息到當前活動窗口,告訴當前活動窗口輸入法窗口已經(jīng)關閉。

圖5 輸入法模塊示意圖

4 結(jié)束語

在嵌入式操作系統(tǒng)VxWorks的圖形界面開發(fā)過程中,WindML作為VxWorks的標準圖形開發(fā)組件往往是最佳選擇,由于WindML只能實現(xiàn)點線圓作圖、窗口移動縮放等簡單功能,圖形界面開發(fā)支持較弱。本文采用基于控件技術的層次化設計和面向?qū)ο蟮脑O計方法,在WindML基礎之上實現(xiàn)了一種在VxWorks實時操作系統(tǒng)下具有自主知識產(chǎn)權(quán)和開放體系結(jié)構(gòu)的人機界面圖形開發(fā)系統(tǒng)JARI_EGK。目前JARI-EGK已經(jīng)成功應用到海軍多個項目軟件開發(fā)中,實際工程應用表明,JARI_EGK在功能和性能方面能夠滿足VxWorks實時操作系統(tǒng)下圖形界面開發(fā)要求。

JARI_EGK目前只能實現(xiàn)了二維圖形界面顯示開發(fā),但是三維圖形界面顯示已經(jīng)是大勢所趨,因而如何實現(xiàn)三維圖形界面顯示開發(fā)將是今后下一步研究工作的重點。

[1]孔祥營,柏桂枝.嵌入式實時操作系統(tǒng)VxWorks及其開發(fā)環(huán)境[M].北京:中國電力出版社,2002.

[2]張加林,李松,等.基于Tilcon的VxWorks圖形界面開發(fā)技術[J].指揮控制與仿真,2007(5).

[3]皇甫禎,陳懷民,等.VxWorks嵌入式圖形界面設計[J].測控技術,2008(8).

[4]WindML DDK 3.0 PROGRAMMER’S GUIDE [R],Wind River Systems, Inc.2002.

[5]WindML SDK 3.0 PROGRAMMER’S GUIDE [R], Wind River Systems, Inc.2002.

[6]趙甫,李躍,等. VxWorks上的一種GUI系統(tǒng)的設計與實現(xiàn)[J]. 計算機工程與設計,2006(15).

[7]董英英,王啟峰,等.基于S3C2440的WindML圖形驅(qū)動設計[J].現(xiàn)代電子技術,2010(16).

[8]萬海東,劉丹,等.軍事指揮系統(tǒng)中VxWorks下漢字顯示技術[J]. 計算機工程與設計,2009(13).

猜你喜歡
管理器輸入法控件
要命的輸入法
啟動Windows11任務管理器的幾種方法
基于.net的用戶定義驗證控件的應用分析
應急狀態(tài)啟動磁盤管理器
Windows文件緩沖處理技術概述
關于.net控件數(shù)組的探討
找回微軟拼音輸入法設置
輸入法順序聽我使喚
百度被訴侵犯商標權(quán)和不正當競爭
基于嵌入式MINIGUI控件子類化技術的深入研究與應用