Duilib中各個類的簡單介紹


來自:http://www.cnblogs.com/xubin0523/archive/2012/06/01/2530901.html

  DirectUI意為直接在父窗口上繪圖(Paint on parent dc directly)。即子窗口不以窗口句柄的形式創建(windowless),只是邏輯上的窗口,繪制在父窗口之上。微軟的“DirectUI”技術廣泛的應用於Windows XP、Vista、Windows 7,如瀏覽器左側的TaskPanel,控制面板導航界面,Media Player播放器,即時通訊工具MSN Messager等。

  DirectUI好處在於可以很方便的構建高效、絢麗的、非常易於擴展的界面。國外如微軟,國內如騰訊、百度等公司的客戶端產品多采用這種方式來組織界面,從而很好的將界面和邏輯分離,同時易於實現各種超炫的界面效果如換色、換膚、透明等。

DirectUI可以理解為一個輕量級的WPF,可以讓C++做出C#般絢麗的界面。

  目前國內做DirectUI皮膚庫的公司主要有兩家:第一家是UIPower(即Skin++的公司),網址www.uipower.com,其DirectUI產品網站www.directui.com,做的很專業;另一家是UIEASY,網址www.uieasy.com,一個輕量級皮膚庫DSkinLite。但是,網上關於DirectUI的技術文章卻很少;早在 6/26/2005,一個國外的程序員就已經寫了一個開源的DirectUI例子,應該算是國內所有directui界面庫的起源了,網址http://www.viksoe.dk/code/windowless1.htm,探討一種實現的可能性和思路,和實際應用雖有一定距離,不過卻是一個很好的學習資料。再后來,一個國內的程序員“當個傻瓜蛋”,基於此代碼,進行重構和修正Bug,並放到了google上開源,網址http://code.google.com/p/duilib/,下載地址svn checkout http://duilib.googlecode.com/svn/trunk/ duilib-read-only。

本人通過學習這個duilib的源代碼,學到了很多知識、思路和經驗,分享給看到此文的朋友,共同探討DirectUI技術,並歡迎大家加入到開發開源DirectUI皮膚庫的行列當中。分析難免有誤,見諒!

一、核心類

  1. CWindowWnd,窗口對象管理父類,主要作用:  

    1) 創建窗口。

    2) 窗口消息過程處理。

    3) 提供窗口子類化與超類化接口。

   2. CDialogBuilder,控件布局類,主要作用:  

    1) 讀取XML腳本,分析腳本,構建控件樹。  

    2) 創建控件對象。

  3. CPaintManagerUI,窗口消息及圖形繪制管理器類,與窗口綁定,主要作用:  

    1) 繪制控件。    

    2) 消息管理。  

    3) 事件通知。

  4. INotifyUI,事件通知抽象類,主要作用:  

    1) 重載Notify虛函數,處理事件通知。

二、控件類

   1. CControlUI,控件管理父類,主要作用:  

    1) 控件的通用基類,提供控件通用屬性管理。

   2. CLabelUI,靜態標簽類,父類CControlUI。

   3. CButtonUI,按鈕類,父類CLabelUI。

   4. COptionUI,選擇按鈕類,父類CButtonUI。

   5. CTextUI,靜態文本類,父類CLabelUI。

   6. CProgressUI,進度條類,父類CLabelUI。

   7. CSliderUI,父類CProgressUI。

   8. CEditUI,編輯框類,父類CLabelUI。

   9. CListUI,列表框類,父類CVerticalLayoutUI、IListUI。  

    1) CListHeaderUI,父類CHorizontalLayoutUI。  

    2) CListHeaderItemUI,列表頭類,父類CControlUI。  

    3) CListTextElementUI,類表文本類,父類CListLabelElementUI。  

    4) CListLabelElementUI,父類CListElementUI。

   10. CComboUI,組合框類,父類CContainerUI、IListOwnerUI。

   11. CActiveXUI,ActiveX控件類,父類CControlUI、 IMessageFilterUI。

   12. CContainerUI,容器類,父類CControlUI、IContainerUI。

   13. CTabLayoutUI,選項頁布局類,父類CContainerUI。

   14. CTileLayoutUI,父類CContainerUI。

   15. CDialogLayoutUI,對話框布局類,父類CContainerUI。、

   16. CVerticalLayoutUI,垂直布局類,父類CContainerUI。

   17. CHorizontalLayoutUI,水平布局類,父類CContainerUI。

   18. CListExpandElementUI,父類CListTextElementUI。

   19. CListContainerElementUI,父類CContainerUI、IListItemUI。

三、輔助類

   1. CStdPtrArray,指針數組。

   2. CStdValArray,數據數組。

   3. CStdString,字符串數組。

   4. CStdStringPtrMap,字符串指針映射數組。

 DuiLib類圖:

    

 

怎么在mfc中加duilib:把dulib的頭文件和庫包含一下,解決一些沖突就可以了。窗口可以是mfc的(繪制用duilib,mfc原有邏輯保持不變),也可以使用duilib的。 直接自定義個控件,重寫DoPaint。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM