轉自 暗の魔法使 博客:https://blog.csdn.net/jsntzsy/article/details/88554543 作者:ExDirectUI 諾諾
在前期做了一兩個月所需技術儲備和代碼架構等準備工作後,ExDirectUI 5.0 項目(以後統稱5.0)的重構於今日正式啓動,今後我會在此博客持續更新開發進度和心得,沒有特殊原因的話更新頻率約爲每週一到兩次,歡迎大家一起討論和督促。
今天我先將5.0前期收集到的需求及所設想的架構向大家闡述,歡迎大家提出建議意見:
ExDirectUI 5.0 需求
- 內置控件的無窗口句柄化,採用邏輯控件模式而非直接派生於Windows控件,避免外部程序直接採用WinAPI操作;
- 繪圖採用Direct2D/GDIPlus雙引擎進行繪製,所提供的繪圖接口做到用戶透明,引擎繪製出的效果儘量保持一致;
- 控件系統支持動畫機制,內置支持透明度、位移等動畫變換,支持動畫進度緩動機制,提供自定義動畫的接口;
- DLL接口採用句柄+消息+函數操作,並根據需求再在此基礎上封裝面向對象的類庫,函數接口類似WinAPI相關函數;
- 支持通過XML/JavaScript創建、操作窗口及控件,並提供接口於主程序交互;
- 支持主題包、資源包、風格文件,主題包支持單獨設置(可以設置到控件級),資源包支持加載入口腳本;
- 支持提取窗口、控件的當前位圖(支持透明通道);
- 支持 MSAA、I18N、Drag&Drop、DPI自適應 等功能;
- 支持控件容器的佈局機制,初步設想提供線性佈局、流式佈局、表格佈局、頁面佈局、相對佈局、絕對佈局,並提供接口支持自定義佈局。
- 除了Windows原生支持的常用圖像格式外,另外支持APNG格式實現支持透明通道的動畫圖像格式。
- 列表、樹等數據類控件支持數據適配器綁定,支持從XML、數據庫、內存等方面自動處理表項數據。
- 提供窗口(Window)、對話框(Dialog)、消息框(MessageBox)、菜單(Menu)、彈出式窗口(PopupWindow)。
- 支持對控件和圖像進行圓角化、蒙版、模糊、色調調整等操作。
- 支持無邊框、不透明、分層、高性能(D2D/Win8以上支持)等窗口模式。
- 控件包括消息和事件兩部分,其中事件由消息產生,支持控件的子類化和超類化。
- 控件的事件依次通過自身、JS、單獨綁定的回調函數、直接父控件、間接父控件(允許事件冒泡)、所在窗口的分發層級,所有層級均可攔截。
- 控件支持跨窗口置父。
- 提供所見即所得的 ExDirectBuilder 界面工程編輯器(待引擎功能基本完善後開始實施該項目),主要功能包括:拖拽式的窗口布局開發、界面開發支持設置容器佈局、支持控件掛接JS事件和編輯腳本、支持綁定數據適配器、支持界面預覽、支持主題包/資源包/風格文件的編輯、支持工程整體打包爲資源包、支持生成創建代碼和事件接口等,次要功能包括:現有界面自動抽取、宮格貼圖矩形生成、顏色拾色和配色推薦、界面SPY調試工具等。
- 完備的開發幫助文檔和例子源碼,並隨引擎版本更新。
ExDirectUI 5.0 初步架構
根據需求分析及之前版本的經驗,初步設計瞭如下工程架構(此爲初步設想,編寫過程中可能會適當調整):
1. 繪圖模塊(Drawing)
1.1 畫布(Canvas)
1.2 圖像(Image)
1.3 矩陣(Matrix)
1.4 路徑(Path)
1.5 區域(Region)
1.6 字體(Font)
1.7 畫刷(Brush)
1.7.1 純色畫刷(SolidBrush)
1.7.2 線性漸變畫刷(LinearBrush)
1.7.3 徑向漸變畫刷(RadialBrush)
1.7.4 紋理畫刷(TextureBrush)
2. 資源模塊(Resource)
2.1 主題包(ThemePacket)
2.2 資源包(ResourcePacket)
2.3 風格文件(StyleSheet)
3. UI模塊(UIElements)
3.1 窗口(Window)
3.2 皮膚(Skin)
3.2.1 菜單(Menu)
3.2.2 消息框(MessageBox)
3.3 控件(Controls)
3.3.1 基礎控件集(BaseSet)
3.3.2 容器控件集(ContainerSet)
3.3.3 數據控件集(DataSet)
3.3.4 視覺控件集(VisualSet)
3.3.5 框架控件集(FrameSet)
4. 功能工具模塊(Utils)
4.1 DPI自適應機制(DPI Adaptive)
4.2 緩動機制(Easing)
4.3 動畫機制(AutoAnimation)
4.4 拖放機制(Drag&Drop)
4.5 數據適配器機制(DataAdapter)
4.6 多語言機制(I18N)
4.7 容器佈局機制(Layout)
4.7.1 線性佈局(LinearLayout)
4.7.2 流式佈局(FlowLayout)
4.7.3 表格佈局(TableLayout)
4.7.4 頁面佈局(PageLayout)
4.7.5 相對佈局(RelativeLayout)
4.7.6 絕對佈局(AbsoluteLayout)
4.8 腳本機制(Script)
4.9 視障輔助機制(MSAA)
4.10 插件機制(Plugin)
ExDirectUI 5.0 項目進度安排
由於我只是在工作之餘利用業餘時間進行項目的開發,且本人是個C++菜鳥┓( ´∀` )┏,所以效率不會很高,開發進度預計會安排得很長。另外,由於要先忙自身工作,所以進度隨時可能會有短暫的停滯,還請大家見諒。
項目進度安排如下,完成情況將更新於後面的帖子。
前期需求分析、技術儲備和架構預想:一個月 ——【已完成】
項目建立,引擎全局函數、基礎常用類型的編寫: 一週——【基本完成】
繪圖模塊的編寫和測試:一個月——【進行中】
主題包、資源包模塊的編寫和測試:兩週——【未開始】
窗口的創建、綁定和消息的基本處理:一週——【未開始】
控件基類的編寫,控件渲染機制的編寫:一個月——【未開始】
窗口和控件基類的對接和完善,DPI自適應的處理:視情況時間不定——【未開始】
基礎控件集部分控件的開發:一週——【未開始】
DLL接口整理、文檔和例程的編寫、發佈AlphaⅠ版:兩週——【未開始】
根據內測使用反饋情況調整代碼:視情況時間不定——【未開始】
佈局/腳本/多語言文件的處理:一個月——【未開始】
緩動機制和動畫機制的編寫:一個月——【未開始】
DLL接口整理、文檔和例程的編寫、發佈AlphaⅡ版:兩週——【未開始】
根據內測使用反饋情況調整代碼:視情況時間不定——【未開始】
容器佈局機制的實現:一個月——【未開始】
拖放機制和視障輔助的支持:一個月——【未開始】
基礎控件集、容器控件集的開發:一個月——【未開始】
DLL接口整理、頭文件和調用模塊的編寫、文檔和例程的編寫、發佈BetaⅠ版:兩週——【未開始】
根據使用反饋情況調整代碼:視情況時間不定——【未開始】
數據控件集的開發:一到兩個月——【未開始】數據適配器機制的實現:一個月——【未開始】
其餘控件的開發:視情況時間不定——【未開始】
DLL接口整理、頭文件和調用模塊的編寫、文檔和例程的編寫、發佈BetaⅡ版:兩週——【未開始】
根據使用反饋情況調整代碼:視情況時間不定——【未開始】
插件機制的安排和接口處理:視情況時間不定——【未開始】
系統整體調試、發佈BetaⅢ版:兩週——【未開始】
迭代多次,待引擎基本穩定後,發佈正式版:視情況時間不定——【未開始】
根據5.0的使用和現實工作情況,適時開始 ExDirectUIBuilder 項目的開發工作。
其他想說的
最後我想說,諾諾我是從2013年 ExDirectUI 1.6 時代開始入的坑,從一開始的菜鳥小白,慢慢學習成長爲今天一個能幫助泆寒開發UI引擎的“副教主”。我想告訴現在入坑的童鞋們,任何事總要有個學習、適應過程,不要想着一口氣吃個諾諾胖子,學習要循序漸進。使用ExDirectUI是需要一定編程基礎的,多看多理解提供的例程,同時要多動腦子舉一反三,在向其他人提問前儘量先自己多想想多試試,另外百度、谷歌、MSDN相關知識也是個不錯的選擇。
最後的最後,希望大家能早日成爲ExDirectUI圈裏響噹噹的大牛大拿大神!
最後的最後的最後,宣傳一波ExDirectUI羣,希望有興趣的童鞋可以加入,我們一起討論一起成長:
ExDirectUI 開車討論①羣:433859(滿了,暫時不加了,開放時會再通知)
ExDirectUI 聊騷討論②羣:155525070(對ExDirectUI感興趣都可以加,加羣看好問題)
ExDirectUI 後宮佳麗控件開發交流羣:323701035(主要是對控件開發有興趣的,不是都能批的哦)
ExDirectUI 引擎開發交流羣:129705651(對UI引擎開發有興趣的可以加,能批的就更少了)
ExDirectUI 商業用戶交流羣:(暫無)
對了,有幾種人最好別進:純伸手黨、EQ低性格倔、廣告黨、紅包黨、機器人黨、開車過分黨。
最後的最後的最後的最後,感謝你能看到這,完了。