金山衛士界面源碼解讀及界面庫分離(3)
發布時間:2011-3-29 22:01
發布者:1770309616
![]() 通過前面兩篇文章的介紹,相信同學們對Kui這個庫的大體使用方法有了了解. 接下來,我們就可以開始實際演練了,下面我們將展現基礎控件的使用. 不過在這里要提一下此庫的一些沒完善的地方,因為論壇有人提到了. 一.沒有鍵盤接口,所以對Tab等按鍵無法反應. 二.還沒有換膚功能 三.xml必須手工編輯. 四.其實也是很多人提到的,就是代碼缺乏注釋,很多時候還可能發現代碼有些零亂,的確不應該是金山這種頂級軟件公司所應該展現的樣子. 不過這方面金山已經作了相關說明.代碼需要和商業代碼相分離,很多做法可能是暫時的. 對于這些弊端,可以自己來完善,我如果一直對它保持著興趣,相信也會去完善它的. 好了,下面我們將以第一篇文章的代碼Sample2為例子,講解Kui庫中的基礎控件.Kui庫的基礎控件并不多,只有簡單的幾個基礎控件.不過相信對于大部分的需求來說還是可以應付的.畢竟它是針對金山衛士進行開發的,而金山衛士是作為商業級來應用的.一般的功能性軟件還是夠用了. 而且以后將講解對庫的擴充方法,那樣針對你的應用來,在Kui框架下編寫特定控件也是很簡單的. 窗體布局 在上一篇文章金山衛士界面源碼解讀及界面庫分離(2) 中,我們說過Kui窗體是分為上中下三部分的, 分別為Header,Body,Footer 這三部分內容是通過xml來定義的.其實Kui所有的資源都是通過xml來定義的.他們分別如下所示: xmls.xml 定義其他需要使用到的xml images.xml 定義圖片 strings.xml 定義文本 通過定義之后就可以通過ID來使用資源了. 我們將需要使用的所有圖片都在images.xml中定義. 如果你需要程序支持多語言,可以在strings.xml里定義所有需要展現的文本.那樣需要多語言支持只需要提供另一個xml,而不需要修改程序代碼 然后我們在xmls.xml里面定義了三個文件,分別是 def_skin.xml 皮膚定義 def_style.xml 樣式定義 dlg_main.xml 窗口定義 他們分別是皮膚,樣式和主窗口. 主窗口結構就是定義在dlg_main.xml 所以我們需要定義窗體時主要是通過主dlg_main.xml來布局窗口中的元素. 我們看看Sample2中如何定義出一個窗口. 界面如下: ![]() 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. 精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷 28. 30. 首先所有窗口必須以layer為根節點.并設置其屬性與窗口屬性對應.關于具體的屬性解釋,我會在以后以文檔方式提供. 簡單說明如下: width是窗體寬度,可用full定義自動填滿寬度,height是高度可用full自動填滿高度, appwin表示是一個程序窗口,那將使其顯示于任務欄. 然后是前面所說的上中下三部分的定義. 他們分別以header,mainbody,footer為節點,但他們實際都是屬于KUI里面的KuiDialog虛擬窗體.是作為子控件的容器的. 這三部分不是都需要的,你可以只取三個中的部分,假如你不需要footer,可以直接去掉.但一般來說標題欄還是要的,否則很難拖動窗口了. header說明: header里面包含的子控件有一個圖標,三個典型的系統按鈕,以及一個顯示標題的文本控件。 他們分別以節點icon,imgbtn,text節點定義。同樣他們的具體說明將以后用文檔提供。 簡單說明如下: pos 是指出控件位置,是所有控件的共有屬性。 icon 以src指明了圖標位置。 text的class指明了所使用的樣式。 imgbtn的id是比較重要的,點擊按鈕后將id以通知方式發送給主窗口,主窗口就可以根據按鈕作相應動作。樣式和皮膚則指明了按鈕外觀 其中按鈕的通知可在程序代碼里如此接收. 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,一般固定設置成該值就可以了.60001對應著xml中關閉按鈕的id,這樣就可以將通知消息映射到了OnBkBtnClose函數當中.用戶再編寫該函數實現就可以了.跟MFC挺相似的. body的說明: body里面我們展現了普通按鈕,靜態文本,分割線,check按鈕,radio按鈕,進度條,楨動畫控件 普通按鈕同樣以id通知,樣式是normalbtn, 需要注意的是普通按鈕雖然看起來比windows原有按鈕漂亮,但他是直接以不同顏色畫出來的,沒有用到貼圖。 線控件以節點[ hr ]表示,直接在界面上畫一條橫線。 check控件和radio控件是直接用window的主題來畫的,所以可以由程序員改變的地方不多。不過一般程序都是以這種外觀展現的。 progress以min和max屬性定義了值范圍,當前值以value表示。showpercent指明是否要顯示百分比文字 img是一系列的小圖片,由subwidth指定每幅圖片的寬度,通過sub屬性來指定當前需要顯示第幾幅圖片?捎糜诘潉赢嫽驙顟B圖標顯示。 footer 一般只是狀態顯示,沒什么地方需要特別說明。 以上文件通過打包成zip文件,并命名為sample2.kui,然后用資源形式隨程序一起提供。資源代碼如下 kuires.dat SKIN "res\\sample1.kui" 可以看到其實Kui提供的基礎控件還是比較少的。不過這對于一般的應用還是可以的。 依據二八原則,應該是百分之八十的程序都是用這些基礎控件的。所以各位同學將就著用吧。 金山衛士就是通過這些基礎控件搭配幾個高級控件完成了整個金山衛士的構建。 |
網友評論