PPSM嵌入式RTOS中的窗口系統(tǒng)開發(fā)
窗口中各控件的繪制函數(shù)以顯示控件;設(shè)第一個有焦點控件為窗口當前的焦點控件。 ③ BOOL CloseWindow(HWND hWnd); 關(guān)閉一個窗口。其工作包括:向該窗口的事件處理函數(shù)發(fā)送WM_CLOSE消息,如果返回FALSE則退出本函數(shù),如果返回TRUE則繼續(xù)以下工作 ——恢復窗口覆蓋區(qū)圖形;釋放POPUP類窗口的屏幕活動區(qū)和窗口活動區(qū); 依次釋放該窗口包含的控件;隱藏光標;釋放該窗口結(jié)構(gòu)占用的內(nèi)存;向上層窗口發(fā)送WM_TOPWNDCLOSE的消息,該消息用于下層窗口更新需要自動變化的界面,如股票實時大盤數(shù)據(jù)表;設(shè)置該窗口的前一層窗口為應用程序的頂層窗口。 ④ WNDPROC函數(shù)指針類型 typedef BOOL (*WNDEVENTHANDLE) (HWND hWnd, U16 msgType, U32 id,P_U32 data, U32 size); ⑤ DefWndProc(HWND hWnd, U16 msgType, U32 id,P_U32 data, U32 size); 處理如POPUP窗口區(qū)外的點擊自動關(guān)閉窗口之類的消息和行為。 ⑥U32 WndAddCommand(HWND hWnd, P_S8 cmdName, U16 cmdLen, P_U8 cmdIcon); 向有狀態(tài)條控件的窗口增加應用程序定義的命令。命令出現(xiàn)在狀態(tài)條的彈出菜單中。該函數(shù)返回一個唯一的命令I(lǐng)D,用于窗口處理WM_COMMAND消息時區(qū)分命令。 ⑦ BOOL WndDelCommand(HWND hWnd, HCMD cmdId);刪除一條命令。 ⑧ U32 WndSetCommand(HWND, U32 cmdId, P_S8 newCaption);修改一條命令。 ⑨ 其它函數(shù)。因篇幅原因,不能完全列出和解釋所有的窗口操作函數(shù)。 3.1 控件的實現(xiàn) (1)控件的基本結(jié)構(gòu) 我們使用控件的基本結(jié)構(gòu)定義各類控件的公共屬性。具體的控件結(jié)構(gòu)在此基礎(chǔ)上擴展,以包含其它屬性。以下論述控件的基本屬性。 首先,在窗口的顯示過程中,各控件的外觀由自己繪制,因而各種控件需要一個繪制函數(shù)。該函數(shù)在定義具體控件時定義,在控件結(jié)構(gòu)中保留該類函數(shù)的指針。其次,各種控件需要各自的消息處理函數(shù),該函數(shù)的指針也保存在結(jié)構(gòu)中。最后,一些控件可能會動態(tài)分配內(nèi)存空間以保存自身的數(shù)據(jù)??丶枰诒会尫艜r釋放這樣的內(nèi)存,因而控件結(jié)構(gòu)中也保存控件釋放函數(shù)的指針。 控件是窗口上的一個可操作區(qū)域,主要由筆輸入來操作,因而控件需要響應筆操作的活動區(qū)。各種控件的活動區(qū)數(shù)量不同,因而在控件結(jié)構(gòu)中需要保存一個可增長的活動區(qū)列表;但控件的屏幕區(qū)域可能覆蓋部分窗口中的其它活動區(qū)(如其它控件),從而造成控件操作的混亂,因此需要一個控件占用區(qū)域的活動區(qū),以屏蔽其它可能造成干擾的活動區(qū)。 由于我們需要各種控件能在定義新控件時使用,即作為新控件的子控件,在控件的結(jié)構(gòu)中,須保存子控件列表。各類控件的繪圖、消息處理和釋放函數(shù),必須為控件系統(tǒng)定義的相應的缺省處理函數(shù)。這些缺省處理函數(shù)根據(jù)控件的子控件列表,首先調(diào)用子控件的相應函數(shù)。 (2)具體控件定義的方法 ① 一個具體的控件對應一個特定的結(jié)構(gòu)。該結(jié)構(gòu)首先包含控件的基本結(jié)構(gòu),其次定義該控件所需要的其它屬性。如按鍵控件,需要有按鍵的類型、顯示的文本或圖形、筆操作所需的活動區(qū)ID和按下狀態(tài)等屬性。 ② 定義控件的繪制、消息處理和釋放函數(shù)。 ③ 定義該控件的創(chuàng)建函數(shù),如CreateButton()。在該函數(shù)的參數(shù)中包含該控件所需的初始屬性、參數(shù)中標準的部分是控件的位置和大小。該函數(shù)初始化該控件結(jié)構(gòu)的屬性,包括初始化在基本控件結(jié)構(gòu)中的控件繪制、消息處理和釋放函數(shù)指針,使之指向相應的函數(shù)。 ④ 定義操作控件、存取控件中數(shù)據(jù)所需的其它函數(shù)。 (3)系統(tǒng)預定義的控件 在系統(tǒng)中,已經(jīng)使用這種定義方式定義了一些常用的控件。它們有: ① 按鍵:Button。文本或圖形按鍵,Check方式按鍵。 ② 標簽:Label。 ③ 復選框:CheckBox。 ④ 單選框:RadioBox。 ⑤ 組合框:CombBox。 ⑥ 滾動條:ScrollBar。水平或垂直,簡單類型滾動條可作為Spin使用。 ⑦ 編輯框:TextBox。單行或多行,可編輯或不可編輯,有選塊功能。 ⑧ 列表框:ListBox。單列或多列,選項可帶有圖標。 ⑨ 狀態(tài)條:StateBar。含有命令菜單彈出按鍵、窗口關(guān)閉按鍵(在窗口關(guān)閉按鍵上顯示窗口標題)、輸入法按鍵、輸入法選擇按鍵、日期和時間顯示區(qū)。 日歷控件:Canlendar。顯示任意年月的日期,可切換公歷和農(nóng)歷。組合日歷控件:Date。單行顯示日期,有彈出日歷的按鍵。電子表格:Excel。顯示數(shù)據(jù)庫的記錄,可按每列對應的字段排序。組控件:Group。用于控件分組。 3.2 菜單系統(tǒng) 菜單是通過在POPUP窗口中加入ListBox控件實現(xiàn)的。菜單窗口的消息處理函數(shù)在用戶選擇列表框項目后自動關(guān)閉,并向應用程序發(fā)送WM_ MENUCLICK消息。該消息帶有選項的序號。 |