適用于移動終端的GUI設(shè)計與實現(xiàn)
GUI將某些消息直接發(fā)送給應(yīng)用程序的窗口函數(shù),而不是將它們放入到應(yīng)用程序隊列中,這樣的消息稱為非排隊消息。通常,非排隊消息是那些僅影響該窗口的消息。雖然大多數(shù)消息都由GUI產(chǎn)生,但應(yīng)用程序也可以產(chǎn)生自己的消息并將其加入到應(yīng)用程序隊列中。
一旦應(yīng)用程序的主函數(shù)從隊列中獲取了消息,就可以將消息傳送給相關(guān)窗口的窗口函數(shù),并把消息的內(nèi)容作為參數(shù)傳遞過去,這樣,窗口函數(shù)就可以處理這個消息,完成相應(yīng)的工作。當(dāng)窗口函數(shù)返回后,GUI將控制權(quán)返回給主函數(shù)。主函數(shù)可以再從隊列中取出下一消息進行處理。
2.4 窗口管理
窗口是終端應(yīng)用程序的主要輸入輸出設(shè)備。應(yīng)用程序只有通過窗口才能訪問顯示設(shè)備。窗口由標題條、菜單條、滾動條、邊框以及在顯示設(shè)備上的矩形框里出現(xiàn)的其它特性組成。當(dāng)創(chuàng)建窗口時,可為窗口指定所要求的特性,然后GUI畫出此窗口并管理它。
雖然應(yīng)用程序創(chuàng)建了某一窗口,并且從技術(shù)上來說可以獨占它,但該窗口的管理實際上是由應(yīng)用程序與GUI相互協(xié)作來實現(xiàn)的。GUI管理窗口的位置和顯示方式,并管理窗口的標準特性,如邊框、標題等,同時完成許多由用戶初始化并直接影響窗口的任務(wù)。而應(yīng)用程序則管理窗口的其它所有工作,特別是負責(zé)管理窗口的“客戶區(qū)”(窗口邊框以內(nèi)的區(qū)域)。應(yīng)用程序可完全控制屬于自己的窗口客戶區(qū)的顯示。
為管理這一協(xié)作任務(wù),GUI告知每個窗口其變化可能要受到影響。因此,每個窗口必須具有相應(yīng)的“窗口函數(shù)”,用于接收窗口管理消息。窗口管理消息既可指定該函數(shù)要執(zhí)行的動作,也可請求該窗口函數(shù)返回信息。
窗口函數(shù)作為窗口最重要的基本屬性,處理所有傳送到本窗口的消息。窗口的表現(xiàn)及行為特征是由窗口函數(shù)定義的對消息的處理所決定的。在正常情況下,具體的窗口函數(shù)只處理部分指定的消息,而正是這部分特定消息的處理決定了各個窗口的不同特性。通過調(diào)用窗口函數(shù),將消息參數(shù)傳遞到所指定的窗口函數(shù),由窗口函數(shù)依據(jù)消息所攜帶的消息參數(shù)進行判斷處理。對絕大部分消息只需將其送往缺省窗口函數(shù)進行處理。缺省窗口函數(shù)集成了標準窗口函數(shù)對消息的標準處理,是對所有窗口函數(shù)的一個共性集合窗口管理收集所有的輸入信息,然后把這些輸入信息以消息的形式送往合適的窗口。這些消息的執(zhí)行結(jié)果又可能產(chǎn)生新的消息,新消息的傳送仍由窗口管理負責(zé)。窗口管理通過調(diào)用窗口函數(shù),向窗口函數(shù)傳遞消息參數(shù),把消息送到目的窗口。在移動終端中,采用消息分派技術(shù)將協(xié)議棧消息依次發(fā)往所有具有系統(tǒng)屬性的窗口。通過窗口樹表將非協(xié)議棧消息送往所獲取的當(dāng)前焦點窗口。
3. GUI調(diào)用流程
下面通過一個具體例子分析GUI函數(shù)調(diào)用流程:移動終端的窗口系統(tǒng)初始化時首先要創(chuàng)建一個菜單,在注冊菜單窗口類時將菜單序號圖片全部按順序讀入內(nèi)存,這就需要GDI用畫刷對象來進行矩形填充,下圖清晰的顯示了GUI在注冊這個窗口類時各層調(diào)用的流程。
圖4. GUI調(diào)用流程
4. 結(jié)語
GUI系統(tǒng)是一項復(fù)雜的軟件工程,本文設(shè)計和實現(xiàn)的GUI占用資源少、可配置,特別適用于移動終端。它給終端上層應(yīng)用提供了一個清晰的圖形界面。同時,在將它用于多種終端平臺時還要盡可能考慮它的可擴展性、兼容性、可移植性等屬性。
評論