<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM平臺的Microwindows圖形編程

ARM平臺的Microwindows圖形編程

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

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


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

關(guān)鍵詞: 嵌入式系統 Microwindows ARM

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>