SOUI 框架介绍¶
1. 什么是 SOUI?¶
SOUI(Simple/Small/So UI)是一套高效的 C++ DirectUI 开发框架,致力于提供一个轻量级但功能强大的界面开发解决方案。它采用 XML 配置文件 + 图片资源 + 控制脚本(Lua、Javascript)的开发方式,类似于 Web 程序的开发模式。
1.1 发展历程¶
- 最初源自金山卫士开源版本中使用的 UI 库 Bkwin
- 后由启程软件开发维护并升级为 Duiengine
- 经过多次重构后改名为 SOUI,寓意"瘦 UI"("UI, just so so!")
- 目前已经发展到 SOUI5 版本,实现了真正的跨平台支持
1.2 开源协议¶
- SOUI 1-2 版本:MIT 开源协议
- 公司和个人均可免费使用
- 仅需在发布时附带 SOUI 的许可证
- SOUI 3+ 版本:自定义开源协议
- 非商业项目可免费使用
- 商业项目需要付费授权
1.3 为什么选择 SOUI?¶
在 Windows 平台上开发客户端产品时,开发者往往面临以下选择:
1. 传统框架¶
- MFC(微软在更新)
- WTL(微软已停止更新)
- 优点:稳定可靠
- 缺点:界面不够美观,配置不够灵活
2. 现代框架¶
- Qt:功能强大但体积庞大,跨平台特性带来一定取舍
- Duilib:简单但功能有限,复杂效果实现困难
- SOUI:平衡了轻量性和功能性,提供完整的解决方案
2. 核心技术特性¶
2.1 高性能设计¶
1. 扁平化框架设计¶
- 层次简单,消息传递链短
- 从宿主窗口到控件响应仅一个中间层
- 最大限度减少性能开销
2. 智能渲染系统¶
- 精确的剪裁区域控制
- 优化的刷新策略
- 高效的渲染引擎(支持 Skia/GDI)
- 支持分层渲染和混合效果
3. 优化的动画系统¶
- 统一的定时器管理
- 低 CPU 占用率
- 流畅的动画效果
2.2 界面布局系统¶
1. 简洁的布局属性¶
- pos:使用"x1,y1,x2,y2"定义相对位置
- offset:定义额外的位置偏移
- 支持百分比和像素混合布局
2. 容器分层技术¶
- 支持控件容器的多层次组织
- 自动处理子控件坐标
- 优化列表控件性能
2.3 资源管理系统¶
提供三种资源加载方式:
1. 文件方式¶
- 直接从文件系统加载
- 便于开发调试
2. PE 资源¶
- 编译到执行文件中
- 适合发布版本
3. ZIP 包¶
- 支持加密保护
- 推荐使用 7z 打包
- 支持资源热更新
2.4 控件系统¶
1. 无窗口控件¶
- 轻量级实现
- 高效的绘制机制
- 灵活的自定义能力
2. 高性能列表控件¶
- 基于虚表技术
- 动态创建可见项
- 支持海量数据(700万条数据流畅显示)
3. 先进的 RichEdit 实现¶
- 基于 ITextServices 接口
- 完整的细节处理
- 优秀的用户体验
2.5 扩展功能¶
1. 脚本引擎¶
- 支持 Lua 脚本
- XML + Lua 开发模式
- 灵活的事件处理
2. 多语言支持¶
- 内置翻译功能
- 类似 Qt 的语言模块
- XML 配置翻译文件
3. 事件处理模型¶
- 支持 WTL 风格消息映射
- 支持事件订阅机制
- 灵活的响应方式
3. 成功案例¶
SOUI 已在多个商业项目中得到验证:
1. 医疗领域¶
- 瑞雪医生客户端
2. 游戏行业¶
- 多玩魔盒 2.0
- Dota2 游戏盒子
- 其他多个游戏盒子
3. 知名应用¶
- 百度云管家
- 迅游
- 航信
4. 获取与使用¶
4.1 代码仓库¶
- SOUI 5¶
- SOUI 2¶
4.2 快速上手建议¶
1. 了解 WTL 基础 参考soui-wtl¶
- 消息处理机制
- 事件映射概念
- 基本开发模式
2. 掌握消息处理¶
- 正确使用消息映射
- 处理消息传递链
- 避免常见陷阱
结语¶
SOUI 是一个精心打造的 UI 框架,体现了开发团队的工匠精神。它在保持高性能的同时,提供了丰富的功能特性,是一个值得信赖的 UI 开发解决方案。正如项目理念:"因为努力,所以美丽!"