新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于MiniGUI的數(shù)字加密電話系統(tǒng)GUI設(shè)計

基于MiniGUI的數(shù)字加密電話系統(tǒng)GUI設(shè)計

作者: 時間:2011-08-19 來源:網(wǎng)絡(luò) 收藏


3 關(guān)鍵問題的解決方法
3.1 動畫抖動問題的解決
產(chǎn)生動畫抖動的主要原因是,用animation控件實現(xiàn)動畫時,頻繁地產(chǎn)生MSG_PAINT消息,加重了屏幕刷新的請求。Mini通過判斷窗口是否含有無效區(qū)域來確定是否需要重繪窗口。如果需要重繪就向應(yīng)用程序發(fā)送MSG_PAINT消息。窗口的重繪任務(wù)需由應(yīng)用程序自己完成,因為Mini不保存被覆蓋區(qū)域的內(nèi)容。Mini的窗口在響應(yīng)MSG_PAINT消息的時候進行復(fù)雜的圖形處理,尤其是在刷新時,對圖像的擦除和重寫造成了圖像顏色的反差。當(dāng)繪圖消息的響應(yīng)很頻繁時,這種反差也就越發(fā)明顯,于是我們就看到了動畫抖動的現(xiàn)象。為了解決動畫抖動的問題,系統(tǒng)采用了雙緩沖技術(shù)和多個圖片交替顯示的方法。并在實際應(yīng)用中證明了該方法是行之有效的。雙緩沖技術(shù)要比直接操作顯存速度更快,因此可以解決抖動現(xiàn)象。
采用雙緩沖技術(shù)實現(xiàn)動畫的基本思路是這樣的,首先在系統(tǒng)內(nèi)存中建立一個類似顯示內(nèi)存的內(nèi)存設(shè)備上行文,然后將待顯示圖片填充到該內(nèi)存設(shè)備上行文中,最后再通過位拷貝方式復(fù)制到顯示內(nèi)存中。為了達到動畫的效果,將多個圖片循環(huán)顯示,即設(shè)定定時器和靜態(tài)變量,每當(dāng)定時器觸發(fā)時,根據(jù)靜態(tài)變量的值顯示不同的圖片,靜態(tài)變量由0到MAX循環(huán)。實現(xiàn)動畫的詳細(xì)流程如圖4所示。定時器的時間間隔和圖片的數(shù)量可以根據(jù)具體情況任意調(diào)整。本系統(tǒng)的主顯示區(qū)動畫采用這種方法實現(xiàn)后,動畫效果流暢,不再有抖動現(xiàn)象。

本文引用地址:http://www.butianyuan.cn/article/150319.htm

d.jpg


3.2 功能選擇界面閃爍問題的解決
功能選擇界面閃爍的主要原因是屏幕內(nèi)容過多,刷新負(fù)載過大。本系統(tǒng)采用雙緩沖技術(shù)和.cfg配置文件的設(shè)置方法,實現(xiàn)只刷新屏幕的局部,解決了功能選擇界面閃爍問題。每次按上下左右鍵或關(guān)閉功能窗口時,用以下3個步驟實現(xiàn)重繪屏幕無效區(qū)域(以圖3為例)。
①A區(qū)用小圖標(biāo)恢復(fù),用函數(shù)StretchBlt(hdcmem,0,0,0,0,hdc,WIN_LEFT,WIN_TOP,WIDTH,HIGHT,(DWORD)0)實現(xiàn),其中hdcmem是內(nèi)存設(shè)備上下文,是用CreateCompatibleDCEx()函數(shù)創(chuàng)建的。該內(nèi)存設(shè)備上行文中已經(jīng)存有圖3下圖中的A區(qū)域信息(第一次是在窗口的MSG_ CREATE消息中保存的,第二次開始是在第二步驟保存的)。
②將B的圖片區(qū)域(小圖片)復(fù)制到內(nèi)存設(shè)備上下文,用函數(shù)StretchBlt(hdc,WIN_LEFT,WIN_TOP,WIDTH,HIGHT,hdcmem,0,0,0,0,(DWORD)0)實現(xiàn)。
③B區(qū)域的圖片放大顯示,通過函數(shù)FillBoxWithBitmap(hdc,WIN_LEFT,WIN_TOP,WIDTH,HIGHT,DESKIMAGE,&bitmap)實現(xiàn)。
其中,WIN_LEFT、WIN_TOP、WIDTH和HIGHT分別表示圖片放大顯示區(qū)域的左、上坐標(biāo)和寬、高。左、上坐標(biāo)的定位公式如下:
WIN_LEFT=水平基準(zhǔn)坐標(biāo)+(i%DESKCOLS)×(BLTWIDTH+水平間隔)
WIN_TOP=垂直基準(zhǔn)坐標(biāo)+(i/DESKCOLS)×(BLTHIGHT+垂直間隔)
式中,i表示第幾個圖片,DESKCOLS表示每一行的圖片個數(shù),BLTWIDTH和BLTHIGHT各表示圖片區(qū)域的寬和高。為了減少屏幕刷新負(fù)載,不在MSG_PAINT消息中刷新背景,而是用.cfg配置文件中的bgpicture參數(shù)指定背景圖,并在指定的目錄中存放背景圖文件。該參數(shù)在的4種渲染器中都有,即在不同的渲染器中,都可以用該方法,無需用代碼去實現(xiàn)背景圖的刷新。

結(jié)語
本文詳細(xì)地描述了MiniGUI的嵌入式系統(tǒng)用戶界面關(guān)鍵問題的解決方案,即無抖動動畫的實現(xiàn)方案和功能選擇界面閃爍問題的解決方案。當(dāng)需要實現(xiàn)動畫,而且動畫文件較大時,可以采用雙緩沖技術(shù)解決動畫抖動的問題。但是雙緩沖技術(shù)需要額外的內(nèi)存設(shè)備上下文,所以簡單的動畫效果可以用SendMessage(窗口句柄,STM_SETIMAGE,pngmap,0)函數(shù)更換圖片的方式實現(xiàn)較好。


上一頁 1 2 3 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉