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

          新聞中心

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

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

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


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

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

          d.jpg


          3.2 功能選擇界面閃爍問(wèn)題的解決
          功能選擇界面閃爍的主要原因是屏幕內(nèi)容過(guò)多,刷新負(fù)載過(guò)大。本系統(tǒng)采用雙緩沖技術(shù)和.cfg配置文件的設(shè)置方法,實(shí)現(xiàn)只刷新屏幕的局部,解決了功能選擇界面閃爍問(wèn)題。每次按上下左右鍵或關(guān)閉功能窗口時(shí),用以下3個(gè)步驟實(shí)現(xiàn)重繪屏幕無(wú)效區(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消息中保存的,第二次開(kāi)始是在第二步驟保存的)。
          ②將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ū)域的圖片放大顯示,通過(guò)函數(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表示第幾個(gè)圖片,DESKCOLS表示每一行的圖片個(gè)數(shù),BLTWIDTH和BLTHIGHT各表示圖片區(qū)域的寬和高。為了減少屏幕刷新負(fù)載,不在MSG_PAINT消息中刷新背景,而是用.cfg配置文件中的bgpicture參數(shù)指定背景圖,并在指定的目錄中存放背景圖文件。該參數(shù)在的4種渲染器中都有,即在不同的渲染器中,都可以用該方法,無(wú)需用代碼去實(shí)現(xiàn)背景圖的刷新。

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


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();