鄒 瑛
(四川司法警官職業(yè)學(xué)院 司法信息管理系,四川 德陽 618000)
MiniGUI 是一種面向嵌入式或?qū)崟r系統(tǒng)圖形用戶界面支持系統(tǒng)[1],可以運行在任何POSIX 兼容平臺上,是一種面向?qū)崟r嵌入式系統(tǒng)的輕量級圖形界面支持系統(tǒng), 具有小巧、高效、可移植性好等特點[2]。
在嵌入式Linux下使用有時需要使用自定義的鍵盤對分頁內(nèi)子控件的鍵盤聚焦消息的處理不靈活,對于要求精美外觀的GUI系統(tǒng)該控件就必須重新設(shè)計。對此這里設(shè)計了自定義屬性頁控件以滿足多分頁內(nèi)子控件對鍵盤和鼠標(biāo)事件的消息處理和GUI外觀的重新繪制。
在功能上屬性頁支持多分頁顯示,每個分頁按鈕對應(yīng)一個分頁,當(dāng)點擊屬性頁上某個分頁按鈕,就會將當(dāng)前顯示分頁隱藏,將當(dāng)前顯示分頁重定向到最新點擊的分頁,然后再次顯示當(dāng)前分頁以此實現(xiàn)分頁的切換。
如圖1所示,采用交叉鏈表設(shè)計了屬性頁數(shù)據(jù)結(jié)構(gòu),所有分頁形成一級雙向鏈表(橫向),每個分頁下還擁有子控件二級雙向鏈表(縱向)。默認第一個分頁為活動分頁,其它分頁為隱藏狀態(tài),當(dāng)調(diào)用消息接口發(fā)送切換分頁的消息后,控件將把當(dāng)前分頁全部子控件(按子控件鏈表遍歷)隱藏,然后把要切換的目標(biāo)分頁全部子控件顯示出來,并更改目標(biāo)分頁索引為當(dāng)前活動分頁索引。其結(jié)構(gòu)體代碼實現(xiàn)如下:
圖1 屬性頁數(shù)據(jù)結(jié)構(gòu)示意
屬性頁數(shù)據(jù)結(jié)構(gòu)的定義是為更好的管理其子控件和繪制控件外觀,都在內(nèi)部使用,無需公布給用戶,所以該結(jié)構(gòu)體定義可以放入控件實現(xiàn)頭文件PageControl_impl.h中,因此該消息接口定義可以放在PageControl.h文件中,控件的實現(xiàn)代碼PageControl.c中包含以上兩個頭文件,但用戶只需包含PageControl.h頭文件即可使用該控件。如下是公布在PageControl.h頭文件的主要接口消息定義:
通過以上消息接口,即可將隨時把一些控件添加到一個新的分頁去顯示,也可以隨時銷毀一個分頁。
定義好屬性頁控件的數(shù)據(jù)結(jié)構(gòu)后,需要分析其控件實現(xiàn)的消息處理流程才能定義其需要公布的消息處理接口[3]。如圖2所示,屬性頁控件在創(chuàng)建時先要處理MSG_CREATE消息,先創(chuàng)建控件結(jié)構(gòu)體變量pData,把該結(jié)構(gòu)體變量地址記錄到控件的附加數(shù)據(jù)成員pCtrl->dwAddData2里,就可以從pCtrl->dwAddData2中得到其指針[4];控件在初始化時調(diào)用函數(shù)GetWindowStyle(hwnd)來獲取該控件的類型風(fēng)格(dwStyle)。為了提高繪圖性能一般在非MSG_PAINT消息的處理中,可以直接調(diào)用GetClientDC獲取屬性頁控件HDC句柄,把有變化的區(qū)域進行繪制。當(dāng)屬性頁控件被彈出窗口遮擋、其它消息中調(diào)用InvalidateRect函數(shù)或控件初始化時系統(tǒng)會發(fā)給該屬性頁控件一個MSG_PAINT消息[5],此時需要全面繪制。
圖2 屬性頁控件消息處理流程
文本使用交叉鏈表設(shè)計并實現(xiàn)了自定義屬性頁控件。將內(nèi)部數(shù)據(jù)結(jié)構(gòu)和外部消息接口分開,方便用戶使用。為了提高繪圖性能盡可能減少使用InvalidateRect函數(shù)產(chǎn)生MSG_PAINT消息,實現(xiàn)局部變化局部處理,這樣不但可以增加控件外觀的精美顯示,也不降低控件的性能。
[1] 北京飛漫軟件技術(shù)有限公司.MiniGUI 編程指南[EB/OL].(2003-10-03)[2011-02-13].http://read.pudn.com/downloads160/sourcecode/embed/720762/編程指南.pdf.
[2] 北京飛漫軟件技術(shù)有限公司.MiniGUI 用戶手冊[EB/OL].(2003-10-11)[2011-02-13].http://read.pudn.com/downloads143/doc/622754/MiniGUIV2.0.pdf.
[3] 陳周國,王勝銀,付國晴.基于Linux QT技術(shù)的遠程監(jiān)控GUI設(shè)計[J].通信技術(shù),2009,42(12):234-236.
[4] 王文啟,韓秀玲,孫波.基于MiniGUI的多進程圖形用戶界面的研究[J].微計算機信息, 2007,23(08):78-80.
[5] 王蕾,陳功新,陸玲,等.基于ARM-Linux的嵌入式系統(tǒng)GUI開發(fā)研究[J].微計算機信息,2009,23(29):122-124.