第一篇:SOUI是什么?
概述
用C++做产品最痛苦的是什么?肯定是做UI。
SOUI的使命就是把痛苦的UI变化成快乐的UI。
什么?UI还能快乐?脑子进水了吗?
当你看完这个系统教程的时候相信你面对UI至少不会再痛苦。你可以对于PM说,UI?Just SO SO!
闲话少说,进入正题。
SOUI是什么?SOUI是启程软件(其实就是我个人了,:)开发的一个C++ DirectUI库。
虽然DirectUI不是什么新技术,但是要把UI做好,DirectUI确实是目前为止最有效的解决方案。
SOUI不是一个新项目,它是基于本人这前开发的DuiEngine再经过为期近半年的重构后完成的版本,目前版本号为0.9.0.1,除了skia渲染模块还有待进一步完善外,其它模块已经基本达到发布标准。(DuiEngine是一个基于原金山的Bkwin重构的UI库,经过两年的不断更新,已经相对稳定,并且已经在多个有大量用户的客户端产品中使用,如多玩魔盒2.0等)
鉴于原有框架的局限,为了更好的满足简化UI开发的目的,我又重新开发了这套SOUI。
SOUI相对于DuiEngine的改进
做SOUI有几个核心需求:
1、功能模块化:特别是渲染部分要让用户可以根据需要选择适合的模块,如GDI,GDI+,SKIA。
2、性能优化
3、简化XML配置
4、删除原有项目中为了版本兼容而遗留的垃圾代码
5、优化项目管理
6、增加代码注释
同时新版本也增加了一些新的特性:
1、新增多语言翻译支持。
2、程序资源提供模块支持多份,以便为从脚本创建UI提供更好的支持。
3、完善LUA脚本模块。
SOUI模块结构
下图为SOUI模块截图:

soui模块是整个项目的核心,除utilities模块外,其它模块都为soui模块服务。
utilities模块提供一些工具类,主要包含pugixml,及一个String类。
soui-sys-resource模块是一个纯资源DLL,提供一些内置控件必须的资源。
demo模块是SOUI界面库的功能演示程序。
translator实现一个从XML文件加载多语言翻译资料的类似QT的语言翻译模块。
render-gdi和render-skia分别实现两个基于GDI及SKIA的渲染模块,它们可以相互替换。GDI的优点是体积小,但是对于apha通道支持能力有限;而skia的优点是速度快,全面支持alpha通道,但是程序体积会有所增加, DLL编译后有1M,压缩后有600K。
resprovider-zip实现了一个从ZIP文件加载程序资源的模块。加上soui中内置的两个资源加载模块,SOUI可以选择从文件中,从EXE资源中及从ZIP文件包中加载程序资源。
script-lua是一个脚本支持模块,目前只实现了几个基本类的导出,要使用更多SOUI类型,还需要增加导出代码。
第一篇先介绍到这里,下一篇将介绍SOUI可以做什么。
第一篇:SOUI是什么?的更多相关文章
- 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...
- Python爬虫小白入门(四)PhatomJS+Selenium第一篇
一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...
- Three.js 第一篇:绘制一个静态的3D球体
第一篇就画一个球体吧 首先我们知道Three.js其实是一个3D的JS引擎,其中的强大之处就在于这个JS框架并不是依托于JQUERY来写的.那么,我们在写这一篇绘制3D球体的文章的时候,应该注意哪些地 ...
- 深入学习jQuery选择器系列第一篇——基础选择器和层级选择器
× 目录 [1]id选择器 [2]元素选择器 [3]类选择器[4]通配选择器[5]群组选择器[6]后代选择器[7]兄弟选择器 前面的话 选择器是jQuery的根基,在jQuery中,对事件处理.遍历D ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Android基础学习第一篇—Project目录结构
写在前面的话: 1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对 ...
- 深入理解ajax系列第一篇——XHR对象
× 目录 [1]创建对象 [2]发送请求 [3]接收响应[4]异步处理[5]实例演示 前面的话 ajax是asynchronous javascript and XML的简写,中文翻译是异步的java ...
- 深入理解javascript对象系列第一篇——初识对象
× 目录 [1]定义 [2]创建 [3]组成[4]引用[5]方法 前面的话 javascript中的难点是函数.对象和继承,前面已经介绍过函数系列.从本系列开始介绍对象部分,本文是该系列的第一篇——初 ...
- 深入理解this机制系列第一篇——this的4种绑定规则
× 目录 [1]默认绑定 [2]隐式绑定 [3]隐式丢失[4]显式绑定[5]new绑定[6]严格模式 前面的话 如果要问javascript中哪两个知识点容易混淆,作用域查询和this机制绝对名列前茅 ...
随机推荐
- split() 注意事项.
split(): 当函数默认为空,它会把所有空格(空格符.制表符.换行符)当作分隔符. 但是当函数参数默认为其他,将会对 空格符.制表符.换行符 当作元素进行分割. a = 'hello world! ...
- POJ 1190(深搜)
http://poj.org/problem?id=1190 又有好久没做搜索的题了,没想到做一个卡了我那么久,想哭啊. 一个中文题,思路呢也就是搜索呗,一层一层往上面搜,不过这里有两个比较重要的地方 ...
- Android 自动化测试 常用的命令----随时更新
常用命令分为三类,如下: 1. android android sdk : 打开SDK管理器. android avd : 打开虚拟设备管理器. android --help : 查看帮助信息. 2. ...
- default constructor,copy constructor,copy assignment
C++ Code 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...
- redis 中文字符显示
2015年5月20日 09:57:01 星期三 方法一: redis-cli -h --raw 方法二: linux 终端: echo -e "\xe7\xa5\x9e\xe6\xa3\x8 ...
- java web 学习 --第六天(Java三级考试)
第五天学习在这:http://www.cnblogs.com/tobecrazy/p/3458592.html session对象 当某个用户首次访问web应用系统时,jsp会自动创建出一个sessi ...
- Ubuntu ( Linux) Eclipse 乱码问题
刚装完Ubuntu,导入Java和Android项目时,发现字符乱码,究其原因,是由于Windows下使用的是GBK编码,而Ubuntu使用的是UTF-8编码.网上查找了相关资料,主要解决方案有两种. ...
- 20145213《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)
20145213<Java程序设计>实验报告一:Java开发环境的熟悉(Windows+IDEA) 实验要求 使用JDK编译.运行简单的Java程序. 使用IDEA编辑.编译.运行.调试J ...
- 一次工作中用到的Highcharts.Chart
一般动态获取图表信息都是通过ajax交互传送数据. 这次是一次性从后台返回集合后,直接在页面取数据绘制图表 引用js <script type="text/javascript&quo ...
- 9.12/ css3拓展、js基础语法、程序基本知识、数据类型、运算符表达方式、语句知识点
css3拓展: <display:none> 将某个元素隐藏 <visibility:hidden> 也是将某个元素隐藏 <display:block&g ...