基於DirectUI的SC設計規劃的我的構想與目標

SC設計的目標:數據庫

SC是一個簡單的基於DirectUI的界面庫。設計SC,主要是基於我的愛好與學習的目的。在本人學習C++的這幾個月來,將一點點收穫與理解。想經過設計SC來進行提高與鞏固。是一個重複造輪子的過程,也是一個我的學習提升的過程。小程序

在學習C++的同時,也感到用C++作開發,界面設計,是一個基礎且必需要作的事。優秀、成熟且系統性的有QT等,開源的更是很多,但學習與瞭解別人的代碼,看是一個基礎,本身寫,能更深入地掌握基礎。因此想經過本身的學習和積累,逐步地,累積性地開發設計一個基於DirectUI的一個SC庫。並但願SC完成後,經過開源等方式,發佈在網絡上,讓其餘C++愛好者一塊兒來交流DirectUI方面的經驗。使本身的C++知識及SC庫相對慢慢提升與完善,並讓SC達到實用的目標。瀏覽器

所以,設計SC的目標能夠總結爲如下幾點:網絡

1.     學習與提高;框架

做爲一個C++語言的初學者。如今從頭開始學習C++,在學習了最基本的C++知識後,但願經過在動手開發SC的過程當中,能更多地理解掌握好C++語言和一些系統相關的基礎知識。ide

開發SC,是我的愛好和我的學習的目的,是基於本人有足夠精力和時間的基礎上進行的。有重複造輪子的嫌疑,是我的的選擇。也是提升本身的一種方法之一,我選擇這種方法,是基於本身的愛好與精力而爲之。函數

在開發語言更方便,更智能,集成度更高的今天,若是簡單地將開發語言做爲一個工具,長此以往,就會失去學習與提升的動力。語言過多地工具化時,也會使工做變得枯燥,無趣。甚至會慢慢變得吃力。所以,本身動手寫些相對更基礎的東西,有另一份樂趣和挑戰性。工具

2.     分享與交流;佈局

網上有不少基於DirectUI的開源代碼。我也大概瞭解和學習了一下。在吸收別人經驗的基礎上,本身再動手開發一個,雖然是畫蛇添足,但對提升和消化知識,頗有幫助。若是SC在別人的基礎上更進一步,對DirectUI開源來講,也是好事。SC會基於開源與共享的目標,能夠提供給別人參考瞭解的一個機會,也能讓本身在別人的指點下,進一步的提升。雖然到目前爲此,我仍還不知道如何進行開源發佈,但這也是慢慢學習的第一步。學習

3.     實用與推廣;

有些開源項目,因爲無利可圖,開發者常常是半途而止。這是正常現象。SC未來也會這樣。但這不重要。開發SC的目標,是交流、學習與提升。在此基礎上,經過一段時間的積累與完善,讓SC能達到實用的目標。也算實現了我的最初想法。若是將SC做爲一個基礎,讓它能應用到本身未來要開發的項目上,並鍥而不捨地不斷完善。甚至在此基礎上開發一個PRO版甚至商業版,經過推廣能獲取收益。也是再好不過了的。總之,有但願將SC作更好,但也順其天然。我的目標是半年的開發學習,半年的完善提升。以後將會如何,再看時間與精力。也看SC的水平與程度。有計劃,也看實際狀況,再說再說。

4.     基於我的愛好;

學習一門開發語言,是一個枯燥的開始,找個目標讓本身起步,會增長動力。有人學習爲更好地工做,有人學習是由於愛好,我是基於興趣愛好,也是爲了打發時間。定個SC的計劃與目標,是讓事情能看起來有點但願,實現起來有個步驟。每一個人都應該有點夢想,萬一實現了呢。再說,SC不是個什麼夢想,只是個簡單的想法,能走到哪一步,根本是不知道的。基於最初最好的想法開始,纔會有更多更新的動力去實現。首先,他不是一個壞事,其次,他是一個學習的過程,有學習纔有進步。

 

SC名稱的解釋:

SC: 「S」 能夠是Sub Simple的意思。」C」 能夠是Compact的意思,也能夠是 Component的意思。」C」 也能夠理解爲C語言。」SC」大意是簡單緊湊的C++語言界面組件庫。

    SCW: 「W」 意指WindowsSCW SC(W)是指支持Windows平臺的SC庫。不一樣的平臺使用不一樣的後綴字母,如 SCM: SC MacOSX平臺下的SC庫。SCA: Android平臺下的SC庫。SCU: Ubuntu平臺下的SC庫。等等。之後有能力再針對這些平臺開發對應的SC支持庫。固然這種可能性不大,我的精力與時間不夠,知識更也不夠。因此可能性不大,但先這麼設定了,誰知道呢,萬一有可能呢,也不必定。


SC的任務:

SC是個基本於DirectUI的界面庫。他沒法去跟商業化,企業化的產品做比較。這方面,QT WPF, 國內UIPowerDirectUI等會是你最好的選擇。SC像其餘的開源做品同樣,更多的是立足學習與交流。他不會同於已有的開源DirectUI,也不會侷限於DirectUISC會集合更多的經驗,參考與學習更多的別人的長處,並結合我的的理念與設計,成爲一套不同的DirectUI界面庫。

 

首先,得知道 基於C++DirectUI界面庫,應用會愈來愈少。更多的開發,都轉向了Web。若是PC不死,還是有人會用獲得的,這就是開發SC的基本動力。至因而可能是少,暫且不去考慮。

 

如今作開發,都想跨平臺!SC也想實現多平臺,但,能力有限,有想法,但沒法實現。因此,SC,先從咱們最熟悉的Windows開始。在能完成Windows下的實現爲基礎,再說別的。因此設計時,會基於可實現多平臺的構造着手。至於可否真正實現多平臺,先不做過多的計劃。

 

因爲本人只學會了VC,因此SC的基礎,是從基於VCWindows平臺下實現的DirectUI界面庫開始的。起步的侷限性是不免的,但走出第一步也是很重要的。

 

作任何事,都得有目標,更得有計劃。這個規劃,就是計劃實現的第一步。規劃中的前幾部分,我在學習C++時,已基本掌握,也逐步實現。中間幾部分,也在慢慢努力,不久以後也會實現。後幾部分,是未來的規劃,可能實現,也可能不會實現。SC雖然是個人學習與愛好。但我會把他用到我我的的其餘小軟件與項目的開發中。因此,實現SC的實用性,也是個人目標之一。

 

SC的規劃:

1.     基礎框架

做爲SC的基礎庫,這部分代碼儘可能實現平臺無關性。SC中的基礎類,經常使用通用函數等,兼顧未來所謂的跨平臺,儘可能使用STL庫,學習參考已有的成熟代碼,結合本身的想法來實現。在Windows平臺下,爲提升本身的開發效率,部份內容會先使用VC庫已有的一些代碼來達到目標。

基礎框架包括:一些宏的定義;數據類型的通用性定義;CObject類及反射機制的實現。通用型經常使用函數庫集合,一些其餘模塊(如繪圖,窗體,組件等)的基礎類……等。將SC組件共用的屬性與行爲進行基類的封裝。

包括:CPointer, CPointF, CRectF, CPathF, CComponent, CControl, CForm等。

2.     系統平臺支持

主要以IApplication應用程序接口類,實現主程序的啓動、退出、窗口建立、消息處理等,構建一個能實現跨平臺的基礎框架。

使用服務繼承的方式,產生抽象的IApplication應用程序接口類,規劃IApplication的通用事件等。

經過繼承IApplication先實現CWinApp類。完成基於Windows實現主程序的消息處理,窗體建立,鼠標與鍵盤服務接管等。

3.     繪圖引擎

做爲界面顯示輸出與代碼實現的中間層,繪圖引擎採用純虛的圖像設備上下文來封裝應用程序的繪圖動做。包括點、線、面、區域、圖像等繪製,以及一些經常使用的特效、變形等。提供通用的入口,對具體的繪圖實現進行封裝。再根據平臺不一樣,採用不一樣的繪圖引擎來進行模塊實現。

經過CCanvas類,提供繪圖純虛函數,再派生出CGDICanvas, CDirect2DCanvas等實現類。來完成 GDI+ Direct2D的繪圖引擎,達到界面輸出的目的。

支持 bmppngjpggiftga等圖片格式;支持多圖層Alpha混合特效。

4.     UI邏輯

基於DirectUI理念,以窗體爲主體,實現無句柄的組件。將圖片、字體、圖像、樣式、光標等資源進行統一的管理,並共享與優化資源,以最小的內存佔用,最高的繪圖效率實現窗體組件的狀態變化,區域的刷新、界面的初始化繪製、窗體的重繪等。

經過在內存中完成繪製,再一次性輸出到顯示終端的方式,來實現更快速的界面繪製與重繪。

包括實現鼠標移動,點擊,按鍵等輸入變化引發的界面變化的一些基本邏輯操做。

經過CControl類負責處理全部控件共用的各類UI邏輯。

5.     事件處理

實現消息接管,分發消息等。封裝窗體、容器、組件之間的鼠標移動、點擊、用戶按鍵等操做處理。實現組件的位置移動、大小變化、拖曳響應等操做的封裝。

6.     界面佈局

窗體內、容器內子組件之間的位置、對齊、停靠等,能夠經過 ControlLayout屬性,方便實現組件在容器或窗體間的佈局。再經過引用層的概念,方便高效地實現組件在窗體中的頂層底層的顯示、組件覆蓋的透明化、組件背景的毛玻璃化等特效。

7.     主題(換膚)引擎

支持窗體及全部控件的換膚;提供資源方式、文件方式、設計時方式等多種模式的主題及換膚。可實時實現全局或部分組件的換膚。使界面更具個性化和美觀性。

8.     多語種實現

提供全部組件的標準文本輸出與資源的多國語種的管理,並提供動態切換語種與更新文本顯示的功能。

9.     特效

經過繪圖引擎與渲染技術,實現顯示與切換特效。

組件與文本顯示特效:透明、陰影、模糊、變形、倒影等。

基本的切換特效:淡入淡出,左右上下滑入滑出等。

圖片顯示的各類特效:如百葉窗、翻頁、水滴、波紋等

10.  標準組件

完成一些基於DirectUI實現的最常的基本組件。如文本,按鈕,圖像顯示,輸入框,勾選單選框,容器,列表框等。

包括:

Label/GlyphLabel, Button, RadioBox, CheckBox, Menu, PopupMenu, TrayIcon, Timer, Panel, Bevel, Line, ProgressBar, TrackBar, ImageView, ListBox, TreeBox, Edit, ComboBox……

組件具備可擴展性。能夠基於基本組件,設計出具備更豐富功能的派生組件。

11.  擴展、定製組件**

一些有特定功能,或具備更豐富功能的強大組件。

相似 ExcelGrid, RichEdit, HTMLView富文本顯示等組件。

12.  打印輸出

實現文本與圖像的打印輸出功能。提供樣式設置,紙張選擇,打印機設置等基本選項的實現。

**在後繼支持數據庫的狀況下,提供更豐富、更強大的數據庫報表格式設置。

13.  可視化界面設計工具 SDK**

提供界面設計工具 SDK, 支持拖拽式界面設計,讓界面開發所見即所得;

14.  文檔**

文檔包括:設計文檔、開發日誌、BUG修復日誌、升級日誌、幫助文檔、使用說明等, 博客文檔。

15.  數據庫部件、組件**

提供基於數據庫的純虛抽象類。CDBConnect, CDataset, CDataSource等。派生出基於MySQL, SQLServer, Orecle…等數據庫的鏈接與管理的基本操做類,如數據的顯示、新增、插入、刪除、查詢、篩選等。並將數據操做響應與基本組件進行鏈接。

提供更豐富的數據庫打印與報表生成模塊。

16.  PRO(商業)**

讓基礎版SC庫達到能開發通常性小工具類與應用類軟件的目標。在此基礎上,若有可能與必要的前提下,設計基於基礎SC庫的增強版或商業版。

 

SC的時間計劃:

做爲我的愛好與興趣,SC的開發是自由散漫的,沒有詳細的時間日程,但會有一個大概的實現計劃。鑑於一我的的能力與精力有限,規劃中目標實現的預期效果也是沒法保證的。2015年從如今開始的一全年時間內,已計劃在保證其餘正常生活不受影響的狀況下,儘量多地投入時間來實現SC庫的完成。SC做爲一個懶散的我的年計劃,在學習與興趣中慢慢實現。

 

要求在設計與學習過程當中,儘量地多寫好日誌。並按期對階段性的任務做總結及文檔整理。對關鍵性的東西,能夠寫成文檔或手記做爲備案。良好的文字記錄,強於好記性。在學習中打發時間,這樣想一想,一年也就很快過了。

 

大致時間安排以下:

 

3月份:

整理前幾個月的學習資料及已完成的代碼。規範設計文檔,完成規劃中1-3項的工做。

4月份:

完成規劃中4-8項的工做。並學習瞭解如何進行開源發佈。將已完成的代碼提交到開源網站。並與興趣愛好相投的朋友進行交流與學習。以便進一步完善規劃與代碼。

5月份:

完成規劃中9-10項的工做。主要完成10標準組件中最經常使用組件的實現與測試。

並在此基礎上完成一個或多個基於標準組件的簡單示範小程序。

6月份:

經過開源與其餘愛好者進行更多地學習與交流。整理與完善已完成的代碼,豐富其餘未完成的功能。

繼續完成標準組件中未完成的部分。整理相關文檔。並着手開發一至二個特定組件。

7月份:

利用SC庫,開發一個基於SC庫的小工具,暫定爲日曆、事件提醒、桌面背景等功能的小軟件。以此着力檢驗SCUI美觀設計與基本功能實現效率上的表現。

8月份:

基於SC庫,開發一個圖片瀏覽器軟件。以此學習瞭解更多關於圖片格式處理、圖片顯示特效等相關的知識。

9月份:

九月本人計劃旅遊與休息的月份。暫不做過多的安排~~。如在旅遊中產生什麼靈感,或時間還有充裕,再安排一年中餘下幾個月的計劃。休閒的一個月,也是存儲能量的一個月。

10-12月:

    完善或開發SC規劃中12項之後的部分。


本人不太瞭解如何開源與發佈源碼。歡迎有了解的朋友留言提供幫助。

有興趣的朋友也能夠加Q或羣進行交流:

QQ羣:177312461         我的QQ:48018276

相關文章
相關標籤/搜索