適用于移動終端的GUI設計與實現(xiàn)
要在圖形輸出設備上繪制圖形,在調用圖形輸出函數(shù)時,均要求指定經初始化的圖形設備上下文(Device Context,DC),也稱作設備環(huán)境。設備上下文是連接應用程序、設備驅動程序以及輸出設備的紐帶,見圖3。設備上下文包含許多屬性,當需要修改這些屬性時,只需調用一個GDI函數(shù)修改設備上下文中屬性的參數(shù)。
圖3. 設備上下文
一個圖形設備上下文所代表的含義很復雜,它起碼應該包含如下內容[5]:
? 該設備上下文本所在設備信息(顯示模式、色彩深度、顯存布局等等);
? 該設備上下文所代表的窗口以及該窗口被其他窗口剪切的信息
? 該設備上下文的基本操作對象(筆、刷子、字體、位圖、區(qū)域等),及其上下文信息;
? 由程序設定的局部信息(繪圖屬性、映射關系和局部剪切域等)。
2.2.2 繪圖函數(shù)
設備上下文的屬性決定了有關繪圖函數(shù)如何工作的細節(jié)。通過繪圖函數(shù)應用程序能夠方便地畫出直線、矩形、圓、橢圓和其它復雜圖形,而不需直接與具體的輸出設備打交道。
2.2.3使用GDI對象的函數(shù)
當調用繪圖函數(shù)時,使用當前設備上下文中選擇的GDI對象來進行繪圖。GDI共有筆、刷子、字體、位圖、區(qū)域和邏輯調色板六個對象。
例如可以通過在CreatePen、 CreatePenIndirect或ExtCreatePen函數(shù)中指定這些特征來建立一個邏輯畫筆,這些函數(shù)傳回一個邏輯畫筆的句柄。要使用這個畫筆,就要用SelectObject將畫筆句柄選進設備內容。這樣,畫任何線都使用這個畫筆,然后可以取消設備內容中的畫筆選擇,并清除畫筆對象。清除畫筆對象是必要的,因為畫筆定義占用了分配的內存空間。
除了畫筆以外,GDI對象還用于建立填入封閉區(qū)域的畫刷、字體、位圖以及GDI的其它一些方面。
2.3 消息隊列
移動終端產生的消息主要包括:按鍵事件消息、協(xié)議棧消息及自定義消息等。按鍵一般有12個標準電話按鍵、左右2個軟鍵、5個導航鍵(上、下、左、右、中) 、撥號鍵和掛機鍵,由此可產生對應的短按鍵及長按鍵消息。按鍵的按下及釋放產生按鍵事件,對比鍵碼表對按鍵事件進行解碼,獲取正確的按鍵消息。按鍵消息經消息過濾后送往當前焦點窗口。GSM 協(xié)議棧消息是由手機平臺產生的送往消息隊列的協(xié)議棧消息,主要是網絡事件及手機狀態(tài)的響應消息,包括所有對SIM卡、網絡狀態(tài)、通話、短消息等的響應消息。協(xié)議棧消息需傳送到賦于系統(tǒng)窗口屬性的窗口,但窗口并不需要對每一項協(xié)議棧消息進行處理,只依據(jù)窗口函數(shù)的具體屬性定義進行消息響應。
GUI采用消息驅動機制,把上面這些消息收集在一個消息隊列中,然后將這些消息連同定時器和重畫消息一起放入應用程序消息隊列中。應用程序消息隊列是屬于各個應用程序所有的先進先出隊列。但是定時器消息和重畫消息保留在隊列中直到應用程序處理完所有其它消息后才予以處理。GUI將屬于一個特定應用程序的消息放入該應用程序的消息隊列中,然后應用程序讀取這些消息,并將它們發(fā)送給相應的窗口函數(shù)。
評論