<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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


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

          本文引用地址:http://www.ex-cimer.com/article/150319.htm

          d.jpg


          3.2 功能選擇界面閃爍問題的解決
          功能選擇界面閃爍的主要原因是屏幕內(nèi)容過多,刷新負(fù)載過大。本系統(tǒng)采用雙緩沖技術(shù)和.cfg配置文件的設(shè)置方法,實(shí)現(xiàn)只刷新屏幕的局部,解決了功能選擇界面閃爍問題。每次按上下左右鍵或關(guān)閉功能窗口時,用以下3個步驟實(shí)現(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)實(shí)現(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)實(shí)現(xiàn)。
          ③B區(qū)域的圖片放大顯示,通過函數(shù)FillBoxWithBitmap(hdc,WIN_LEFT,WIN_TOP,WIDTH,HIGHT,DESKIMAGE,&bitmap)實(shí)現(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種渲染器中都有,即在不同的渲染器中,都可以用該方法,無需用代碼去實(shí)現(xiàn)背景圖的刷新。

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


          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();