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