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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM平臺的Microwindows圖形編程

          ARM平臺的Microwindows圖形編程

          作者: 時間:2012-06-26 來源:網(wǎng)絡(luò) 收藏

          設(shè)備無關(guān)的圖形引擎層
          系統(tǒng)中最核心的圖形函數(shù)是在圖形引擎層通過調(diào)用下層的硬件設(shè)備驅(qū)動程序?qū)崿F(xiàn)的。用戶應(yīng)用程序通常不直接調(diào)用引擎層的例程,而是調(diào)用最上層所提供的編程接口。將核心的圖形引擎例程獨(dú)立于應(yīng)用程序接口主要是基于以下考慮:核心的例程在Client/Server環(huán)境中總是駐留在Server端,這些例程調(diào)用的位圖與文字格式經(jīng)過優(yōu)化處理,使得執(zhí)行速度更快,所以這些格式通常與應(yīng)用程序所使用的不同。另外,核心例程常使用指針以產(chǎn)生更復(fù)雜高效但邏輯性較差的代碼,而不是采用應(yīng)用程序通常使用的ID號。在的源代碼中,核心的例程通常包含在Devdraw.c、Devclip.c、Devmouse.c、Devkbd.c和DevpalX.c文件中:
          設(shè)備上下文
          應(yīng)用程序必須在調(diào)用圖形繪制API函數(shù)前設(shè)置設(shè)備上下文。一些信息如目前采用的坐標(biāo)系統(tǒng)、當(dāng)前窗口在程序執(zhí)行過程中相當(dāng)長的時間內(nèi)是不變的,所以沒有必要傳遞給每一個調(diào)用的函數(shù),因而可以通過設(shè)備上下文的設(shè)置,將這些相對持久的信息通知系統(tǒng)。同時,如當(dāng)前前景色、當(dāng)前背景色等很多屬性也應(yīng)在設(shè)備上下文中設(shè)置??梢酝ㄟ^調(diào)用GetDC來得到目前的設(shè)備上下文,當(dāng)結(jié)束一系列繪制以后,調(diào)用ReleaseDC函數(shù)釋放DC對象。
          消息傳遞機(jī)制
          API之間最基本的通訊機(jī)制是消息傳遞。一個消息包含有一個約定的消息號、兩個參數(shù):wParam和lParam。消息被存儲在應(yīng)用程序的消息隊(duì)列中,可以通過調(diào)用函數(shù)GetMessage()獲取。當(dāng)?shù)却r,應(yīng)用程序被阻塞。一些消息和硬件事件相關(guān),如WM_CHAR代表鍵盤輸入、WM_LBUTTONDOWN代表鼠標(biāo)左鍵按下。同時,窗口的創(chuàng)建與消除事件分別對應(yīng)WM_CREAT和WM_DESTROY消息。在通常情況下,每個消息都對應(yīng)于一個用HWND標(biāo)識的窗口。在獲取消息后,應(yīng)用程序通過調(diào)用DispatchMessage()將消息分派到所對應(yīng)的窗口進(jìn)行處理。當(dāng)窗口建立時,該窗口所對應(yīng)的各種消息的處理函數(shù)同時被定義,所以系統(tǒng)知道向哪一窗口傳遞消息。 消息傳遞機(jī)制允許核心的API通過對應(yīng)各種事件的消息傳遞來實(shí)現(xiàn)各種功能,如窗口的創(chuàng)建,繪制,移動等等。通常情況下,相關(guān)的窗口操作消息都由DefWindowsProc函數(shù)來進(jìn)行默認(rèn)的處理,這樣就使得所有窗口的動作在行為上具有一致性,當(dāng)某一窗口需要特殊的操作時,用戶可以通過改寫處理程序來滿足要求。 可直接處理消息的函數(shù)包括SendMessage、PostMessage、PostQuitMessage、GetMessage和DispatchMessage。
          窗口的創(chuàng)建和消除
          一個Microwindows應(yīng)用程序的入口點(diǎn)是WinMain函數(shù),而不是通常情況下的Main()。在Microwindows API中,最基本的顯示單元是窗口,窗口定義了一個顯示區(qū)域和與其相關(guān)的各種消息的處理函數(shù)??梢酝ㄟ^預(yù)定的類型,如按鍵(button)、文本框(editboxs)等來定制窗口,同時也可以由用戶定義特殊的類型。無論通過什么方式定義類型,創(chuàng)建窗口和消息通訊的方法是相同的。與創(chuàng)建和消除窗口相關(guān)的函數(shù)有RegisterClass、UnRegisterClass、CerateWindowEx、DestroyWindow、GetWindowLong和SETWindowLong。
          窗口的顯示和移動
          ShowWindow函數(shù)允許設(shè)備窗口屬性為可視或者隱藏。該屬性也可以在窗口創(chuàng)建的過程中由CreateWindowEx實(shí)現(xiàn)。窗口的移動包括窗口位置或者大小的變化。當(dāng)窗口位置改變時,系統(tǒng)發(fā)送WM_MOVE消息;當(dāng)窗口大小改變時,系統(tǒng)發(fā)送WM_SIZE消息。
          窗口繪制
          在其它窗口發(fā)生移動,導(dǎo)致某一窗口需要被繪制或重新繪制時,Microwindows系統(tǒng)會發(fā)送WM_PAINT消息給相關(guān)的窗口過程。這時,由應(yīng)用程序決定調(diào)用圖形操作函數(shù)來繪制窗口。Micro windows為每個窗口維護(hù)一個UPDATE域,當(dāng)UPDATE非空時就向窗口發(fā)送WM_PAINT消息。為了速度方面考慮,WM_PAINT消息只在應(yīng)用程序隊(duì)列里沒有其它消息的情況下才會發(fā)送,這保證了應(yīng)用程序?qū)Υ翱诘闹乩L可以一步完成,而不會被分割成好多步驟。如果不希望等待,可以調(diào)用UPDATEWindow函數(shù)強(qiáng)制進(jìn)行窗口重繪。
          窗口區(qū)域和絕對坐標(biāo)
          每一個窗口在顯示屏上繪制時,都應(yīng)參照顯示屏像素點(diǎn)的絕對坐標(biāo)進(jìn)行。Microwindows API允許應(yīng)用程序編程人員在窗口中不包括標(biāo)題欄的區(qū)域內(nèi)使用以窗口左上角為基準(zhǔn)的相對坐標(biāo),這部分區(qū)域稱為客戶區(qū)域。GetClientRect函數(shù)和GetWindowRect函數(shù)將返回客戶區(qū)域和窗口的絕對坐標(biāo)。ClientTo Screen函數(shù)和ScreenToClient函數(shù)則完成絕對坐標(biāo)與相對坐標(biāo)之間的相互轉(zhuǎn)換。
            
          結(jié)語
          通過將Microwindows移植到平臺,在保持對系統(tǒng)資源低消耗的同時,在基于中實(shí)現(xiàn)了類似X Windows桌面系統(tǒng)的友好圖形用戶界面。熟悉圖形應(yīng)用程序的用戶可以在該系統(tǒng)上編寫自己的圖形應(yīng)用程序。在未來的設(shè)計(jì)中,Microwindows將發(fā)揮更大的作用。


          上一頁 1 2 下一頁

          評論


          相關(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); })();