[转] 基于DirectUI的SC设计规划的个人构想与目标

原文:http://my.oschina.net/isixth/blog/385092

SC设计的目标:

SC是一个简单的基于DirectUI的界面库。设计SC,主要是基于个人爱好与学习的目的。在本人学习C++的这几个月来,将一点点收获与理解。想通过设计SC来进行提升与巩固。是一个重复造轮子的过程,也是一个个人学习提高的过程。

在学习C++的同时,也感到用C++做开发,界面设计,是一个基础且必须要做的事。优秀、成熟且系统性的有QT等,开源的更是不少,但学习与了解别人的代码,看是一个基础,自己写,能更深刻地掌握基础。所以想通过自己的学习和积累,逐步地,累积性地开发设计一个基于DirectUI的一个SC库。并希望SC完成后,通过开源等方式,发布在网络上,让其他C++爱好者一起来交流DirectUI方面的经验。使自己的C++知识及SC库相对慢慢提高与完善,并让SC达到实用的目标。

因此,设计SC的目标可以总结为以下几点:

1.    学习与提升;

作为一个C++语言的初学者。现在从头开始学习C++,在学习了最基本的C++知识后,希望通过在动手开发SC的过程中,能更多地理解掌握好C++语言和一些系统相关的基础知识。

开发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

时间: 2024-10-11 13:30:28

[转] 基于DirectUI的SC设计规划的个人构想与目标的相关文章

基于DirectUI的SC设计规划的个人构想与目标

SC设计的目标: SC是一个简单的基于DirectUI的界面库.设计SC,主要是基于个人爱好与学习的目的.在本人学习C++的这几个月来,将一点点收获与理解.想通过设计SC来进行提升与巩固.是一个重复造轮子的过程,也是一个个人学习提高的过程. 在学习C++的同时,也感到用C++做开发,界面设计,是一个基础且必须要做的事.优秀.成熟且系统性的有QT等,开源的更是不少,但学习与了解别人的代码,看是一个基础,自己写,能更深刻地掌握基础.所以想通过自己的学习和积累,逐步地,累积性地开发设计一个基于Dire

基于DirectUI 的 SCW- App 主体部分的思路总结

基于DirectUI 的SCW- App 主体部分的思路总结 基于 C++ 的 SC DirectUI 界面库的想法与实现到今天也有近半个月了.一些新的想法与思路在学习和实践中得到了提高.推翻重来,重复再干,虽然是件苦事,但,不得不为之.这样才能有所提高. 上一篇:  基于DirectUI的SC设计规划的个人构想与目标 设计 SCW时,曾总结了一下程序的组成部分: 全局: 管理程序中唯一性的数据成员,对象成员等. 桌面: 与系统桌面相关的一些参数或功能.比如桌面的屏幕大小,鼠标形状等. 窗口:

基于DirectUI 的SCW- App 主体部分的思路总结

基于 C++ 的 SC DirectUI 界面库的想法与实现到今天也有近半个月了.一些新的想法与思路在学习和实践中得到了提高.推翻重来,重复再干,虽然是件苦事,但,不得不为之.这样才能有所提高. 上一篇:  基于DirectUI的SC设计规划的个人构想与目标 设计 SCW时,曾总结了一下程序的组成部分: 全局: 管理程序中唯一性的数据成员,对象成员等. 桌面: 与系统桌面相关的一些参数或功能.比如桌面的屏幕大小,鼠标形状等. 窗口: 负责注册窗.创建.显示.销毁窗口以及其他与窗口相关的功能. 事

SCW 开发心得: 为什么要使用私有类? C++私有类实现要点及心得整理

基于DirectUI 的SCW- C++私有类实现要点及心得 2015.03 在设计 SCW 的过程中.不断了解新知识,作为一个C++初学者,新的知识尤如甘露.尤其在学习过程中,看到别人好的经验与方法,就像发现了新大陆一样.SCW框架虽然还在构建中,还没到 DirectUI那一步,但学习与开发的过程,充满惊喜. 这两天在重构SCW,这已经是第三稿了.虽然我的基础浅薄,知识不深,但我懂得一个道理.如果想弄个好点的SCW界面开发工具出来.没有好的框架,后面实现所谓的DirectUI 都是虚的.要想做

directUI

MFC界面开发中,习惯了使用控件,亦或者是自绘制控件来美化界面,但操作起来繁琐,还不太美观.DirectUI的出现,对于界面开发,给了我们一个新的选择,目前很多公司使用了该技术对其产品进行了美化,效果还是可以得到肯定的. 接下来,分析一下DirectUI可以完成哪些功能,可以简化哪些操作.以及该项技术的关键点技术. 基于DirectUI技术的界面库的优势 界面完全换肤 完全焕肤问题,虽然传统的哦MFC也可以获取窗体句柄等器件对窗体样式大小进行修改定制,但是这操作起来会有很多的类以及对象,首先在内

DirectUI 2D/3D 界面库集合 分析之总结

DirectUI优点在于能够非常方便的构建高效,绚丽的,非常易于扩展的界面.作者是Bjarke Viksoe, 他的这个界面程序思想和代码都很优秀,他的代码主要表述了他的思想,尽管bug比較多,可是很合适学习. DirctUI在不断的完好,有各种各样的3d界面库出来来了,可是,是它在我懵懂时给了我编程的思想,让我踏上了编程之路,以下,我把我搜集的界面库以及重构的界面库都贴出来,大家技术交流交流. 当中下载包中有: Duilib 开发文档.帮助文档以及分析说明文档 diablo_trunk(UI)

基于bootstrap模板-现代浏览器博物馆网页源代码

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-wid

大数据项目实践:基于hadoop+spark+mongodb+mysql开发医院临床知识库系统

一.前言 从20世纪90年代数字化医院概念提出到至今的20多年时间,数字化医院(Digital Hospital)在国内各大医院飞速的普及推广发展,并取得骄人成绩.不但有数字化医院管理信息系统(HIS).影像存档和通信系统(PACS).电子病历系统(EMR)和区域医疗卫生服务(GMIS)等成功实施与普及推广,而且随着日新月异的计算机技术和网络技术的革新,进一步为数字化医院带来新的交互渠道譬如:远程医疗服务,网上挂号预约. 随着IT技术的飞速发展,80%以上的三级医院都相继建立了自己的医院信息系统

图像检索:基于形状特征的算法

本文节选自<基于形状特征的图像检索算法研究> 基于形状特征的图像检索算法相对于颜色特征和纹理特征来说,使用的稍微少一些.摘录了其中的几种算法,不做深入剖析了. 形状通常与图像中的特定目标对象有关,是人们的视觉系统对目标的最初认识,有一定的语义信息,被认为是比颜色特征和纹理特征更高一层的特征.形状描述的准确与否是决定图像检索算法优劣的重要因素,一个好的形状描述符应具备独特性.完备性.几何不变性.灵活性以及抽象性.形状的描述符大体可以分为两大类:第一类是描述形状目标区域边界轮廓的像素集合,称为基于