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
checkouthttp://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,字串指標映射數組。
轉自:http://note.sdo.com/u/icez/n/mvO-X~jyVnpFnM01A0000m