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」 意指Windows。SCW 或 SC(W)是指支持Windows平臺的SC庫。不一樣的平臺使用不一樣的後綴字母,如 SCM: 指 SC MacOSX平臺下的SC庫。SCA: 指Android平臺下的SC庫。SCU: 指 Ubuntu平臺下的SC庫。等等。之後有能力再針對這些平臺開發對應的SC支持庫。固然這種可能性不大,我的精力與時間不夠,知識更也不夠。因此可能性不大,但先這麼設定了,誰知道呢,萬一有可能呢,也不必定。
SC的任務:
SC是個基本於DirectUI的界面庫。他沒法去跟商業化,企業化的產品做比較。這方面,QT, WPF, 國內UIPower的DirectUI等會是你最好的選擇。SC像其餘的開源做品同樣,更多的是立足學習與交流。他不會同於已有的開源DirectUI,也不會侷限於DirectUI。SC會集合更多的經驗,參考與學習更多的別人的長處,並結合我的的理念與設計,成爲一套不同的DirectUI界面庫。
首先,得知道 基於C++的DirectUI界面庫,應用會愈來愈少。更多的開發,都轉向了Web。若是PC不死,還是有人會用獲得的,這就是開發SC的基本動力。至因而可能是少,暫且不去考慮。
如今作開發,都想跨平臺!SC也想實現多平臺,但,能力有限,有想法,但沒法實現。因此,SC,先從咱們最熟悉的Windows開始。在能完成Windows下的實現爲基礎,再說別的。因此設計時,會基於可實現多平臺的構造着手。至於可否真正實現多平臺,先不做過多的計劃。
因爲本人只學會了VC,因此SC的基礎,是從基於VC的Windows平臺下實現的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的繪圖引擎,達到界面輸出的目的。
支持 bmp、png、jpg、gif、tga等圖片格式;支持多圖層Alpha混合特效。
4. UI邏輯
基於DirectUI理念,以窗體爲主體,實現無句柄的組件。將圖片、字體、圖像、樣式、光標等資源進行統一的管理,並共享與優化資源,以最小的內存佔用,最高的繪圖效率實現窗體組件的狀態變化,區域的刷新、界面的初始化繪製、窗體的重繪等。
經過在內存中完成繪製,再一次性輸出到顯示終端的方式,來實現更快速的界面繪製與重繪。
包括實現鼠標移動,點擊,按鍵等輸入變化引發的界面變化的一些基本邏輯操做。
經過CControl類負責處理全部控件共用的各類UI邏輯。
5. 事件處理
實現消息接管,分發消息等。封裝窗體、容器、組件之間的鼠標移動、點擊、用戶按鍵等操做處理。實現組件的位置移動、大小變化、拖曳響應等操做的封裝。
6. 界面佈局
窗體內、容器內子組件之間的位置、對齊、停靠等,能夠經過 Control的Layout屬性,方便實現組件在容器或窗體間的佈局。再經過引用層的概念,方便高效地實現組件在窗體中的頂層底層的顯示、組件覆蓋的透明化、組件背景的毛玻璃化等特效。
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庫的小工具,暫定爲日曆、事件提醒、桌面背景等功能的小軟件。以此着力檢驗SC在UI美觀設計與基本功能實現效率上的表現。
8月份:
基於SC庫,開發一個圖片瀏覽器軟件。以此學習瞭解更多關於圖片格式處理、圖片顯示特效等相關的知識。
9月份:
九月本人計劃旅遊與休息的月份。暫不做過多的安排~~。如在旅遊中產生什麼靈感,或時間還有充裕,再安排一年中餘下幾個月的計劃。休閒的一個月,也是存儲能量的一個月。
10月-12月:
完善或開發SC規劃中12項之後的部分。
本人不太瞭解如何開源與發佈源碼。歡迎有了解的朋友留言提供幫助。
有興趣的朋友也能夠加Q或羣進行交流:
QQ羣:177312461 我的QQ:48018276