基于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

相关文章
相关标签/搜索