通過(guò)前面兩篇文章的介紹,相信同學(xué)們對(duì)Kui這個(gè)庫(kù)的大體使用方法有了了解. 接下來(lái),我們就可以開(kāi)始實(shí)際演練了,下面我們將展現(xiàn)基礎(chǔ)控件的使用. 不過(guò)在這里要提一下此庫(kù)的一些沒(méi)完善的地方,因?yàn)檎搲腥颂岬搅? 一.沒(méi)有鍵盤(pán)接口,所以對(duì)Tab等按鍵無(wú)法反應(yīng). 二.還沒(méi)有換膚功能 三.xml必須手工編輯. 四.其實(shí)也是很多人提到的,就是代碼缺乏注釋,很多時(shí)候還可能發(fā)現(xiàn)代碼有些零亂,的確不應(yīng)該是金山這種頂級(jí)軟件公司所應(yīng)該展現(xiàn)的樣子. 不過(guò)這方面金山已經(jīng)作了相關(guān)說(shuō)明.代碼需要和商業(yè)代碼相分離,很多做法可能是暫時(shí)的. 對(duì)于這些弊端,可以自己來(lái)完善,我如果一直對(duì)它保持著興趣,相信也會(huì)去完善它的. 好了,下面我們將以第一篇文章的代碼Sample2為例子,講解Kui庫(kù)中的基礎(chǔ)控件.Kui庫(kù)的基礎(chǔ)控件并不多,只有簡(jiǎn)單的幾個(gè)基礎(chǔ)控件.不過(guò)相信對(duì)于大部分的需求來(lái)說(shuō)還是可以應(yīng)付的.畢竟它是針對(duì)金山衛(wèi)士進(jìn)行開(kāi)發(fā)的,而金山衛(wèi)士是作為商業(yè)級(jí)來(lái)應(yīng)用的.一般的功能性軟件還是夠用了. 而且以后將講解對(duì)庫(kù)的擴(kuò)充方法,那樣針對(duì)你的應(yīng)用來(lái),在Kui框架下編寫(xiě)特定控件也是很簡(jiǎn)單的. 窗體布局 在上一篇文章金山衛(wèi)士界面源碼解讀及界面庫(kù)分離(2) 中,我們說(shuō)過(guò)Kui窗體是分為上中下三部分的, 分別為Header,Body,Footer 這三部分內(nèi)容是通過(guò)xml來(lái)定義的.其實(shí)Kui所有的資源都是通過(guò)xml來(lái)定義的.他們分別如下所示: xmls.xml 定義其他需要使用到的xml images.xml 定義圖片 strings.xml 定義文本 通過(guò)定義之后就可以通過(guò)ID來(lái)使用資源了. 我們將需要使用的所有圖片都在images.xml中定義. 如果你需要程序支持多語(yǔ)言,可以在strings.xml里定義所有需要展現(xiàn)的文本.那樣需要多語(yǔ)言支持只需要提供另一個(gè)xml,而不需要修改程序代碼 然后我們?cè)趚mls.xml里面定義了三個(gè)文件,分別是 def_skin.xml 皮膚定義 def_style.xml 樣式定義 dlg_main.xml 窗口定義 他們分別是皮膚,樣式和主窗口. 主窗口結(jié)構(gòu)就是定義在dlg_main.xml 所以我們需要定義窗體時(shí)主要是通過(guò)主dlg_main.xml來(lái)布局窗口中的元素. 我們看看Sample2中如何定義出一個(gè)窗口. 界面如下: dlg_main.xml代碼如下: view plaincopy to clipboardprint? 01. 02. 03. 04. 05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 30. 首先所有窗口必須以layer為根節(jié)點(diǎn).并設(shè)置其屬性與窗口屬性對(duì)應(yīng).關(guān)于具體的屬性解釋,我會(huì)在以后以文檔方式提供. 簡(jiǎn)單說(shuō)明如下: width是窗體寬度,可用full定義自動(dòng)填滿寬度,height是高度可用full自動(dòng)填滿高度, appwin表示是一個(gè)程序窗口,那將使其顯示于任務(wù)欄. 然后是前面所說(shuō)的上中下三部分的定義. 他們分別以header,mainbody,footer為節(jié)點(diǎn),但他們實(shí)際都是屬于KUI里面的KuiDialog虛擬窗體.是作為子控件的容器的. 這三部分不是都需要的,你可以只取三個(gè)中的部分,假如你不需要footer,可以直接去掉.但一般來(lái)說(shuō)標(biāo)題欄還是要的,否則很難拖動(dòng)窗口了. header說(shuō)明: header里面包含的子控件有一個(gè)圖標(biāo),三個(gè)典型的系統(tǒng)按鈕,以及一個(gè)顯示標(biāo)題的文本控件。 他們分別以節(jié)點(diǎn)icon,imgbtn,text節(jié)點(diǎn)定義。同樣他們的具體說(shuō)明將以后用文檔提供。 簡(jiǎn)單說(shuō)明如下: pos 是指出控件位置,是所有控件的共有屬性。 icon 以src指明了圖標(biāo)位置。 text的class指明了所使用的樣式。 imgbtn的id是比較重要的,點(diǎn)擊按鈕后將id以通知方式發(fā)送給主窗口,主窗口就可以根據(jù)按鈕作相應(yīng)動(dòng)作。樣式和皮膚則指明了按鈕外觀 其中按鈕的通知可在程序代碼里如此接收. view plaincopy to clipboardprint? 01.KUI_NOTIFY_MAP(IDC_RICHVIEW_WIN) 02. KUI_NOTIFY_ID_COMMAND(60001, OnBkBtnClose) 03. KUI_NOTIFY_ID_COMMAND(60002, OnBkBtnMax) 04. KUI_NOTIFY_ID_COMMAND(60003, OnBkBtnMin) 05. KUI_NOTIFY_MAP_END() KUI_NOTIFY_MAP(IDC_RICHVIEW_WIN) KUI_NOTIFY_ID_COMMAND(60001, OnBkBtnClose) KUI_NOTIFY_ID_COMMAND(60002, OnBkBtnMax) KUI_NOTIFY_ID_COMMAND(60003, OnBkBtnMin) KUI_NOTIFY_MAP_END() 其中IDC_RICHVIEW_WIN是要接收的控件的ID,一般固定設(shè)置成該值就可以了.60001對(duì)應(yīng)著xml中關(guān)閉按鈕的id,這樣就可以將通知消息映射到了OnBkBtnClose函數(shù)當(dāng)中.用戶再編寫(xiě)該函數(shù)實(shí)現(xiàn)就可以了.跟MFC挺相似的. body的說(shuō)明: body里面我們展現(xiàn)了普通按鈕,靜態(tài)文本,分割線,check按鈕,radio按鈕,進(jìn)度條,楨動(dòng)畫(huà)控件 普通按鈕同樣以id通知,樣式是normalbtn, 需要注意的是普通按鈕雖然看起來(lái)比windows原有按鈕漂亮,但他是直接以不同顏色畫(huà)出來(lái)的,沒(méi)有用到貼圖。 線控件以節(jié)點(diǎn)[ hr ]表示,直接在界面上畫(huà)一條橫線。 check控件和radio控件是直接用window的主題來(lái)畫(huà)的,所以可以由程序員改變的地方不多。不過(guò)一般程序都是以這種外觀展現(xiàn)的。 progress以min和max屬性定義了值范圍,當(dāng)前值以value表示。showpercent指明是否要顯示百分比文字 img是一系列的小圖片,由subwidth指定每幅圖片的寬度,通過(guò)sub屬性來(lái)指定當(dāng)前需要顯示第幾幅圖片?捎糜诘潉(dòng)畫(huà)或狀態(tài)圖標(biāo)顯示。 footer 一般只是狀態(tài)顯示,沒(méi)什么地方需要特別說(shuō)明。 以上文件通過(guò)打包成zip文件,并命名為sample2.kui,然后用資源形式隨程序一起提供。資源代碼如下 kuires.dat SKIN "res\\sample1.kui" 可以看到其實(shí)Kui提供的基礎(chǔ)控件還是比較少的。不過(guò)這對(duì)于一般的應(yīng)用還是可以的。 依據(jù)二八原則,應(yīng)該是百分之八十的程序都是用這些基礎(chǔ)控件的。所以各位同學(xué)將就著用吧。 金山衛(wèi)士就是通過(guò)這些基礎(chǔ)控件搭配幾個(gè)高級(jí)控件完成了整個(gè)金山衛(wèi)士的構(gòu)建。 |