• 
    

    
    

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

      VxWorks系統(tǒng)下基于WindML的窗口化圖形界面設(shè)計(jì)

      2015-04-02 12:06:21李瑞齋??周健
      軟件導(dǎo)刊 2015年2期
      關(guān)鍵詞:圖形界面

      李瑞齋??周健

      摘要摘要:介紹了VxWorks系統(tǒng)及WindML,說(shuō)明了基于WindML的窗口設(shè)計(jì)原理,重點(diǎn)闡述了窗口用戶圖形界面設(shè)計(jì)方法,討論了一些主要窗口部件設(shè)計(jì)原理及思路,給出了一些具體代碼示例。

      關(guān)鍵詞關(guān)鍵詞:VxWorks;圖形界面;窗口部件

      DOIDOI:10.11907/rjdk.143925

      中圖分類號(hào):TP316.7

      文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào)文章編號(hào):16727800(2015)002004203

      基金項(xiàng)目基金項(xiàng)目:2014年度河南省重點(diǎn)科技攻關(guān)項(xiàng)目(142102210499)

      作者簡(jiǎn)介作者簡(jiǎn)介:吳秀才(1980-),女,河北衡水人,河南理工大學(xué)萬(wàn)方科技學(xué)院公共基礎(chǔ)課教學(xué)部講師,研究方向?yàn)閼?yīng)用數(shù)學(xué);李瑞齋(1980-),女,河南南樂人,碩士,鄭州大學(xué)西亞斯國(guó)際學(xué)院數(shù)理學(xué)院講師,研究方向?yàn)楦怕式y(tǒng)計(jì);周健(1964-),男,碩士,河南鄭州人,鄭州大學(xué)西亞斯國(guó)際學(xué)院數(shù)理學(xué)院講師,研究方向?yàn)槲锢斫虒W(xué)。

      1VxWorks概述

      VxWorks系統(tǒng)是美國(guó)Wind River公司于1983年設(shè)計(jì)開發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng),它以卓越的可靠性和實(shí)時(shí)性被廣泛應(yīng)用于通信、軍事、航空、航天等高技術(shù)領(lǐng)域 [1]。其內(nèi)核具有很強(qiáng)的可裁剪性, VxWorks提供了WindML組件用來(lái)開發(fā)資源消耗較小的圖形界面,提高了系統(tǒng)的易用性,滿足了對(duì)系統(tǒng)界面有要求的用戶需求。

      本文以Works5.5及其開發(fā)環(huán)境tomado2.2和組件WindML3.0為基礎(chǔ)介紹了窗口化圖形界面的設(shè)計(jì)。

      2WindML概述

      風(fēng)河多媒體庫(kù)[2]WindML(Wind River MUlti-media Library)支持在嵌入式系統(tǒng)上運(yùn)行多媒體應(yīng)用程序,提供基本的圖形、視頻、音頻技術(shù)及標(biāo)準(zhǔn)設(shè)備驅(qū)動(dòng)程序框架,其APl庫(kù)提供了圖形硬件接口和處理輸入輸出設(shè)備事件的能力。

      WindML提供了軟件開發(fā)包(SDK)和驅(qū)動(dòng)程序開發(fā)包(DDK)兩個(gè)組件。SDK用于開發(fā)應(yīng)用程序,提供了用于圖形、輸入處理、多媒體、字體、內(nèi)存管理的API庫(kù)。DDK用于實(shí)現(xiàn)驅(qū)動(dòng)程序,可擴(kuò)展和自定義。

      3窗口化圖形界面程序設(shè)計(jì)原理

      3.1基本概念

      WindML圖形設(shè)計(jì)中的一些基本概念類似于常見的Windows系統(tǒng)下的Visual C++編程,如窗口實(shí)例、窗口類等,也有其特有的,如窗口管理器。一個(gè)窗口實(shí)例即一個(gè)可見的矩形窗口對(duì)象(包括帶框架的普通窗口、無(wú)框架窗、窗口部件等)。通過(guò)設(shè)定其對(duì)應(yīng)屬性,可以實(shí)現(xiàn)移動(dòng)、調(diào)整大小、重疊、包含于另外窗口的操作,通過(guò)編寫回調(diào)函數(shù),可以響應(yīng)各種消息,與輸入設(shè)備、其它窗口、應(yīng)用程序進(jìn)行互動(dòng)。

      窗口類定義了具有同樣屬性的某一類窗口,用于定義窗口部件,通過(guò)預(yù)先定義,這些窗口部件具有了特殊屬性、能力或默認(rèn)數(shù)據(jù)。窗口類的源文件在編寫過(guò)程中,需要編寫消息處理器。消息處理器類似消息回調(diào)函數(shù),用來(lái)響應(yīng)消息,作出相應(yīng)反應(yīng)。消息處理器與回調(diào)函數(shù)不同之處在于前者關(guān)聯(lián)于窗口類,后者直接關(guān)聯(lián)于某一個(gè)窗口實(shí)例,并且在編寫回調(diào)函數(shù)時(shí),將其返回值設(shè)定為UGL_STATUS_ FINISHED, 可以無(wú)視類的消息處理器,使消息不再進(jìn)一步處理。

      窗口管理器由多個(gè)源文件組成,包括窗口類文件、資

      源預(yù)定義文件等,預(yù)定義了一些必要的資源和一些基本窗口類。窗口管理器類似設(shè)備驅(qū)動(dòng)程序,為窗口應(yīng)用程序的設(shè)計(jì)提供了方便的接口。合理利用窗口管理器可以在程序開發(fā)過(guò)程中提高效率,節(jié)省精力。WindML3.0提供了一個(gè)基本的窗口管理器WWM(WindML Windows Manager),封裝了16種顏色、光標(biāo)圖形、3種字體,以及根窗口、框架類、按鈕類、任務(wù)欄按鈕、任務(wù)欄菜單等資源,可以直接使用。設(shè)計(jì)者可以靈活地自定義窗口管理器,以實(shí)現(xiàn)功能擴(kuò)展。原則上WWM文件禁止更改,因?yàn)槿魏沃蟮腤indML重裝、升級(jí)、補(bǔ)丁安裝等都可能覆蓋原來(lái)的文件[3],所作的修改也會(huì)丟失。因此最好的方法是新建一個(gè)窗口管理器。最簡(jiǎn)易的方法是以原WWM的副本為基礎(chǔ)進(jìn)行創(chuàng)建,大致過(guò)程為:在installDir/target/h/ugl/winMgr和installDir/target/src/ugl/winMgr下分別新建自定義的管理器目錄,復(fù)制原wwm目錄下的源文件到新目錄,再修改WindML數(shù)據(jù)庫(kù)配置文件即可,之后可任意修改窗口管理器文件夾內(nèi)的源文件,添加新窗口類文件。

      3.2窗口創(chuàng)建步驟

      WindML的2D圖形庫(kù)提供了基本的繪圖操作和字體、位圖、光標(biāo)、顏色、區(qū)域等管理器,窗口庫(kù)以2D圖形庫(kù)為基礎(chǔ),封裝了用于窗口操作的API,利用它們創(chuàng)建基本的矩形窗口,不足之處是窗口過(guò)于簡(jiǎn)單,而且沒有常用功能的窗口部件,需要自行擴(kuò)展才能設(shè)計(jì)出高效、復(fù)雜的圖形界面。

      窗口庫(kù)封裝了大部分必要的初始化操作,利用窗口管理器設(shè)計(jì)窗口應(yīng)用程序更簡(jiǎn)易。創(chuàng)建一個(gè)普通窗口的步驟為:①調(diào)用winAppCreate()創(chuàng)建窗口應(yīng)用程序;②調(diào)用winCreate()創(chuàng)建服務(wù)于該應(yīng)用程序的窗口; ③調(diào)用winCbAdd()為窗口加入回調(diào)函數(shù),用來(lái)處理交互消息;④調(diào)用winAttach()綁定目標(biāo)窗口到父窗口;⑤調(diào)用winAppDestroy()結(jié)束窗口應(yīng)用程序,銷毀資源。

      4設(shè)計(jì)方法

      4.1基本窗口創(chuàng)建

      4.1.1框架窗口與無(wú)框架窗口

      在winCreate()參數(shù)中設(shè)置WIN_ ATTRIB_RRAMED屬性即可創(chuàng)建框架窗口??蚣艽翱谟蓛刹糠纸M成:窗口類預(yù)定義的外框和中間的內(nèi)容窗。默認(rèn)的框架類在窗口周圍繪制了一個(gè)邊界,可以通過(guò)修改窗口管理器框架類源文件,自定義框架顏色、邊界寬度等??梢杂檬髽?biāo)拖拽移動(dòng)和調(diào)整框架大小,且有最大化、最小化、關(guān)閉按鈕,也可以設(shè)置相應(yīng)屬性來(lái)禁止這些按鈕。窗口庫(kù)提供有若干框架操作的API,可以設(shè)置或獲取框架、矩形位置等。

      winCreate()參數(shù)中不設(shè)置框架屬性,因此創(chuàng)建出的窗口僅有一個(gè)內(nèi)容窗而沒有框架。

      4.1.2窗口基本繪圖

      窗口繪圖原理與普通的2D圖形繪制一樣,使用基本的2D圖形庫(kù)API,但某些步驟,如圖形環(huán)境變量的創(chuàng)建和配置等被封裝在窗口庫(kù)中,使用起來(lái)更方便。窗口繪圖方法有兩種:異步繪圖和同步繪圖。

      異步繪圖是較常用的繪圖方法,通過(guò)響應(yīng)繪圖消息MSG_DRAW,在回調(diào)函數(shù)中編寫繪圖代碼,能夠動(dòng)態(tài)地繪制窗口內(nèi)容,在窗口移動(dòng)后或因遮蓋物移走而重新暴露后自動(dòng)更新、重繪窗口。

      同步繪圖是靜態(tài)的,通過(guò)調(diào)用winDrawStart()和winDrawEnd()在任何時(shí)候都可以進(jìn)行繪圖操作,其間利用基本繪圖函數(shù)編寫具體的繪圖代碼。這種繪圖方法是一次性的,不能自動(dòng)重繪,因此不太常用。

      4.2窗口部件

      一個(gè)窗口化圖形界面需要眾多窗口部件來(lái)實(shí)現(xiàn)各種功能,但WindML的窗口庫(kù)僅提供了一個(gè)基本窗口創(chuàng)建函數(shù)winCreate(),對(duì)于復(fù)雜界面來(lái)說(shuō)是遠(yuǎn)遠(yuǎn)不夠的,因此需要花費(fèi)一定的工作量自定義窗口部件。默認(rèn)的窗口管理器提供了幾個(gè)基本的窗口部件類,包括按鈕、任務(wù)欄、菜單,可以此為基礎(chǔ)進(jìn)行擴(kuò)展。

      4.2.1按鈕

      按鈕在圖形界面開發(fā)中是最常見的,WWM默認(rèn)的按鈕類中提供了一些很有用的函數(shù):按鈕創(chuàng)建、文本設(shè)置、字體設(shè)置及獲取、按鈕顏色設(shè)置。

      按鈕類消息處理器處理的一些主要消息有:

      MSG_DRAW:繪制有立體感的按鈕外觀,包括邊界色和背景色;

      MSG_BUTTON DRAW:繪制按鈕文本;

      MSG_MANAGE:分配資源(設(shè)置默認(rèn)字體和顏色);

      MSG_UNMANAGE:銷毀資源;

      MSG_PTR_BTNl_DOWN:重新繪圖,模擬鼠標(biāo)左鍵按下時(shí)按鈕下沉的外觀;

      MSG_PTR_BTNI_UP:重新繪圖,模擬鼠標(biāo)左鍵彈起時(shí)按鈕彈起的外觀。

      在按鈕MSG_BUTTON_DRAW的消息處理器中,繪圖代碼的原型是直接以單字節(jié)文本繪制,可以修改為先判斷按鈕字符串是英文還是中文,再根據(jù)判斷結(jié)果進(jìn)行繪制,大致流程如圖1。

      圖1按鈕繪制函數(shù)流程

      4.2.2文本框

      文本輸入框也是窗口界面設(shè)計(jì)中常用的窗體,是用戶進(jìn)行數(shù)據(jù)輸入的典型窗口部件。默認(rèn)窗口管理器并沒有提供文本框類,設(shè)計(jì)者可以按照按鈕類自行設(shè)計(jì)。

      4.2.3其它部件

      默認(rèn)的菜單類和任務(wù)類能夠在任務(wù)欄菜單中添加菜單項(xiàng)或添加任務(wù)欄按鈕,可以改進(jìn)和擴(kuò)展源文件以滿足實(shí)際開發(fā)的需要。其它沒有提供的窗口部件類可像前文介紹的文本框類一樣,自行在窗口管理器中設(shè)計(jì)添加。

      4.3代碼示例

      下面以一個(gè)簡(jiǎn)單的系統(tǒng)登錄界面為例,給出部分代碼:

      /*創(chuàng)建窗口應(yīng)用程序*/

      appId=winAppCreate("winsysLogin”,0, 0, 0, UGL_ NULL);

      ……

      /*創(chuàng)建主窗口,居中置頂*/

      winLoginld=winGreate(appId,UGL_NULL, WIN_ATTRIB_VISIBLE|WIN_ATTRIB_TOPMOST,

      (displayWidth-300)/2,(displayHeight-200)/2,

      300, 200, UGL_NULL, 0, UGL_NULL);

      winCbAdd (winLoginId, MSG_DRAW, 0, (WIN_CB*)cbWinLoginDraw,UGL_NULL);

      winCbAdd(winLoginId,MSG_MANAGE,O,(WIN_CB*)cbWinLoginManage,UGL_NULL);

      winCbAdd(winLoginId,MSG_UNMANAGE,O,(WIN_CB*)cbWinLoginUnmanage,UGL_NULL);

      winAttach(winLoginId,UGLNULL_ID,UGL_NULL_ID);

      /*創(chuàng)建取消按鈕*/

      btnCanceIId=wwmButtonCreate (appld,“取消", 200,170,50,20,UGL_NULL, 0, UGL_NULL);

      wincbAdd(btnCancelId,MSG_BUTTDN_Select,UGL_NULL);

      winAUath(btnCancelld,WinLoginId,UGL_NULL_ID);

      /*創(chuàng)建輸入框*/

      tboxUserId=wwmTextboxCreate(appld,8,110,65,100,20,UGL_NULL,0,UGL_NULL);

      tboxPwdId=wwmTextboxCreate(appld,8,110,110.l00,20,UGL_NULL,0, UGL_NULL);

      winAttach(tboxUserId,winLoginld,UGL_NULL_ID);

      winAttach(tboxPwdId,winLoginId,UGL_NULL_ID);

      /*MSG_DRAW的回調(diào)函數(shù)部分內(nèi)容*/

      rect=pMsg->data.dxaw.rect;

      gcId=pMsg->data.draw.gcId;

      /*繪制窗體內(nèi)的文本*/

      uglLineWidthSet(gcId,l);

      uglBackgroundColorSet(gcId,UGL_COLOR_TRANSPARENT);

      uglForegroundColorSet(gcId,WIN_ RED);

      uglFontSet (gcId, WIN_FONT_SONG24);

      pText=“系統(tǒng)登錄”;

      uglTextSizeGetW(WIN_FONT_SONG24,&width,&height,strlen(pText)/2,

      (UGL_WCHAR *)pText;

      uglTextDrawW(gcId,(rect.left+rect.right-width)/2,20,strlen(pText)/2,(UGL_WCHAR*)pText);

      /*繪制輸入框前的提示文本*/

      uglForegroundColorSet(gcId,WIN_BlACK);

      uglFontSet(gcId,WIN_FONT_SONG12);

      pText=”賬號(hào)”;

      uglTextDrawW(gcId,70,65,strlen(pText)/2,(UGL_WCHAR*)pText);

      pText=”密碼:”;

      uglTextDrawW(gcId,70,110,strlen(pText)/2,(UGL_WCHAR*)pText);

      5結(jié)語(yǔ)

      本文討論了VxWorks下基于WindML的窗口化圖形界面設(shè)計(jì)基本原理和方法。在實(shí)際開發(fā)測(cè)試中,WindML具有方便靈活、開發(fā)自由度較大、消耗資源較少的特點(diǎn),是VxWorks系統(tǒng)下開發(fā)圖形用戶界面的有力工具。

      參考文獻(xiàn)參考文獻(xiàn):

      \[1\]陳翌,田健,王金俐.嵌入式軟件開發(fā)技術(shù)[M].北京:國(guó)防工業(yè)出版社,2003.

      [2]WIND RIVER SYSTEMS INC.WindML SDK programmers guide 3.0 [EB/OL].http://www.doc88.com/p-14465587484.html,2002.

      [3]WIND RIVER SYSTEA INC. WindML DDK programmers guide 3.0[Z].Alameda: Wind River Systems Inc,2002.

      責(zé)任編輯(責(zé)任編輯:杜能鋼)

      猜你喜歡
      圖形界面
      基于OpenCV圖像處理軟件的設(shè)計(jì)
      Epigallocatechin-3-gallate exerts antihypertensive effects and improves endothelial function in spontaneously hypertensive rats
      Java語(yǔ)言程序設(shè)計(jì)教學(xué)中的圖形界面案例的探索和研究
      圖形界面設(shè)計(jì)中的動(dòng)態(tài)效果應(yīng)用及趨勢(shì)探析
      用VMRun快速置備千臺(tái)虛擬機(jī)
      基于JavaFX的應(yīng)用系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
      基于Matlab GUI的電位差計(jì)測(cè)量數(shù)據(jù)處理
      基于MATLAB圖形界面研究李薩如圖形及其討論
      科技資訊(2016年6期)2016-05-14 12:29:35
      重看圖形界面“扁平化”與“擬物化”之爭(zhēng)——關(guān)于設(shè)計(jì)思維的探討
      基于QNX的嵌入式操控訓(xùn)練系統(tǒng)軟件設(shè)計(jì)
      光泽县| 常宁市| 万载县| 邵武市| 沁水县| 贵南县| 沙田区| 河曲县| 阜城县| 蒙城县| 洪雅县| 宿州市| 巴塘县| 上虞市| 同心县| 巴林右旗| 维西| 英吉沙县| 彭山县| 遂平县| 聂拉木县| 安徽省| 陕西省| 南宫市| 科尔| 和田县| 攀枝花市| 通州区| 浪卡子县| 西安市| 聂荣县| 刚察县| 南京市| 瓦房店市| 兴海县| 恩平市| 漳浦县| 荔波县| 江安县| 上栗县| 东丽区|