• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

      2011-07-16 07:37:04劉東濤
      指揮控制與仿真 2011年4期
      關(guān)鍵詞:基類圖形界面輸入法

      劉東濤,肖 峰

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

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

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

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

      2 JARI-EGK層次框架

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

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

      圖1 JARI-EGK層次圖

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

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

      3.1 窗口和控件類關(guān)系

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

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

      圖2 窗口、控件類基本關(guān)系圖

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

      3.2 事件傳遞機(jī)制

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

      圖3 JARI-EGK、WindML窗口信息處理對(duì)照?qǐng)D

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

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

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

      圖4 窗口更新示意圖

      3.4 中文輸入設(shè)計(jì)

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

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

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

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

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

      圖5 輸入法模塊示意圖

      4 結(jié)束語

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

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

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

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

      [3]皇甫禎,陳懷民,等.VxWorks嵌入式圖形界面設(shè)計(jì)[J].測控技術(shù),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)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與設(shè)計(jì),2006(15).

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

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

      猜你喜歡
      基類圖形界面輸入法
      Epigallocatechin-3-gallate exerts antihypertensive effects and improves endothelial function in spontaneously hypertensive rats
      基于C#面向?qū)ο蟪绦蛟O(shè)計(jì)的封裝、繼承和多態(tài)分析
      要命的輸入法
      用VMRun快速置備千臺(tái)虛擬機(jī)
      百度被訴侵犯商標(biāo)權(quán)和不正當(dāng)競爭
      空戰(zhàn)游戲設(shè)計(jì)實(shí)例
      重看圖形界面“扁平化”與“擬物化”之爭——關(guān)于設(shè)計(jì)思維的探討
      一種基于用戶興趣的STC改進(jìn)算法
      虛機(jī)制在《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》中的教學(xué)方法研究
      基于數(shù)據(jù)驅(qū)動(dòng)的圖形界面開發(fā)方案
      卢氏县| 滁州市| 衢州市| 南和县| 呼伦贝尔市| 彰化县| 成安县| 济阳县| 三穗县| 公主岭市| 纳雍县| 吴桥县| 柯坪县| 崇礼县| 柘荣县| 揭西县| 安西县| 香港 | 普安县| 马公市| 徐水县| 开封县| 阳江市| 丁青县| 荔波县| 和平区| 健康| 前郭尔| 尚义县| 开阳县| 青川县| 五华县| 安远县| 镇赉县| 股票| 定西市| 景德镇市| 迁西县| 澄江县| 高密市| 永和县|