首页
社区
课程
招聘
[原创]发一个自己的dui 库 demo
发表于: 2015-9-2 18:52 10963

[原创]发一个自己的dui 库 demo

2015-9-2 18:52
10963

======================================
目前已经支持滚动 由于时间关系打算 年后再加新功能
写了个教程
http://blog.csdn.net/dalixux/article/details/48830721
======================================
发1个自己写dui库的 demo
例子代码在附件sample.7z

目前UI库里只有迅雷的bolt 和QQ的UI感觉不错
但要命的是都不开源 至于其他的DUI库 还是跟窗口捆绑的有点紧 不符合需求
QT 的也可以用 但是QT实在太大,因此不得不自己写1个
写到现在已经写了好几个月了 还缺少太多的东西 比如滚动 拖放 快捷键 以及浏览器

目前来讲还是缺乏实用价值
但由于已经能用lua脚本写简单控件了 而且我觉得接口除去未实现的应该也算稳定了
想发出来看看 接口设计是否合理 闭门造车还是不行的 考虑再三还是提前发出来了

设计的方向和bolt比较相似 主要是实践中碰到了迅雷那些写UI的人同样的问题
这个UI库也是尝试解决这些问题的一个方案
ui库由于这个月的改动非常大 导致测试的时间不足 今天一直在调BUG
如果发现BUG 直接回帖
大概1个星期到2个星期之间 还会再发1个版本 主要是修复BUG以及增加浏览器的支持

文档几乎没有 主要还是因为等待实现的东西比较多 现在写了文档过不了几天又要改
实在浪费时间

简单介绍下这个ui库的特点
1.
   C++编写 轻量级 支持xml, 一个类似CSS的语法来描述属性和 lua脚本编写控件
   release版本的dll只有1.6M 用UPX压一下应该可以到0.8M 我觉得应该是
   比较轻量了
   示例代码里提供了1个纯脚本写的按钮 button.lua
   对于类似CSS的支持 由于急着搭框架 仅仅是简单readtoken来解析了下
   支持实在太弱 目前已经感觉到不够用 估计还是要花时间重新弄了
2.
off-screen模式 也就是仅提供一块像素图,使用者只需要传递事件,
最后拿像素图贴到窗口上就行了 由于整个库是跟窗口无关的 理论上可以和
任何现有的dui 框架兼容 脑洞够大的话 可以贴到D3D 和opengl里,
同样由于跟窗口无关所以使用的时候要实现一些特定接口
比如内部封装了windowless richedit,而ITextHost里有些接口必须用到窗口
因此也导致针对richedit对象 需要使用者来实现一些跟窗口有关的接口
示例代码里的panel.cpp封装了窗口和UI库的交互

3.
event模型是类似dom
支持tab切换焦点 但UI库里的image text 等表现元素默认是无法接收焦点的
所以在示例代码里切焦点 只会在lua 按钮和 richedit里切换

4.
开源: github上搜索bones能下到整个源码
目前功能比较弱 很多东西还实现不完整  未来的改动应该会比较大
所以当前源码也仅有参考意义


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 3
支持
分享
最新回复 (17)
雪    币: 153
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
其实还有一些开源的东西可以借鉴:
duilib, SOUI, microsoft directui, 炫彩 GUI
2015-9-2 21:45
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
已经有开源的duilib 和比较不错的soui了
2015-9-2 22:00
0
雪    币: 13
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
怎么说呢 各有长处
写个UI是因为在实际开发中遇到了一些问题
这些问题迅雷bolt也同样遇到了,由于bolt不开源
才动心思写一个出来
仅仅写UI的话很简单 如何方便的写UI 才是我要寻找的东西
2015-9-2 23:01
0
雪    币: 231
活跃值: (2631)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
求实际效果图,和文档
2015-9-3 02:24
0
雪    币: 13
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
效果图 直接下载附件在out目录下有编译好的exe 直接运行就可以
文档暂时没有 因为目前实现的功能太弱,未来的改动会比较大
现在写文档只能是为将来删文档 改文档做准备
但用法比较简单包含一个头文件 用XML创建节点就可以了 具体交互
看示例代码
2015-9-3 08:21
0
雪    币: 13
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
duilib主要已经没有维护了,
另外 有个需求是 无窗口UI 比如某些做游戏破解的 爱在游戏里放自己logo
那么如何嵌进游戏,duilib 我记得没错的话本质还是窗口子窗口 那么嵌入游戏特别是全屏模式就不合适了,
这就需要off screen了,这也是为什么 我提供位图的原因 只要把位图数据存到纹理中
再贴到d3d或者opengl中就可以,类似足球经理 内嵌浏览器就是拿浏览器位图贴进去
而不是从3d引擎内部 自己维护一个浏览器,这2者的复杂度天壤之别
从这个需求来讲 不能直接提供位图的UI框架是不行的,
soui 代码没详细看,但它即使现在不能提供位图 略微做些修改就可以了

其他还有些写控件遇到一些问题 就不详细说了,正是基于这些问题 才尝试放弃传统的继承基类写自定义控件的方法,
示例代码里的 按钮其实是 area标签 text标签 shape标签组合出来的 而不是有个封装了C对象的lua对象,再有个button对象继承这个lua对象 怎么说呢 更类似于html css的p标签 img标签组合出一个按钮
在设计里 我更习惯称 基本标签为基础元素而 bolt称之为原子对象
单纯的写ui是一个非常简单的事情,如果够洒脱 直接用cocos2d来写就行了
2015-9-3 08:42
0
雪    币: 13
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
炫彩gui是什么?
Microsoft dui 是指ddk的那套吗
2015-9-3 09:26
0
雪    币: 144
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我先感觉迅雷的UI界面不错。思路算是比较前沿的。问题是不开源。结果国内使用的很少。只要不开源,以后还是没人敢大规模使用的。估计是要烂在迅雷手里了
2015-9-3 10:14
0
雪    币: 144
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
qt除了编译麻烦一点,其他还不错。它本身不支持lua脚本
2015-9-3 10:18
0
雪    币: 13
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
是啊 qt的确很好 有自己的一套脚本,主要是他自成一体,如果用qt 最好是全部用qt

迅雷那套 当初项目主管和我一起看的网上的文档 ,刚看到的时候很惊艳,在我们才发觉问题并决定解决的时候 迅雷已经有成熟的解决方案了,真是落后一个时代 幸亏不开源 要是开源我也不会想着自己写 现在摸索了几个月 磕磕碰碰的算是有个demo了 真要有实用价值估计还得有段时间
2015-9-3 10:46
0
雪    币: 144
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
迅雷一整套基于脚本的UI c++引擎是做的很不错的。不开源阻止了它的大规模应用。另外,基于.net语言和其他脚本语言的UI引擎更加成熟,开发难度更低,也使得bolt引擎被人抛出脑后了。现在也不是开源的最佳时机了。哎,错过了最好的发展时代。
2015-9-3 12:01
0
雪    币: 13
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
还有cef可以方便的嵌入到框架中,现在桌面ui的一部分工作已经由前端代替了,同样的控件html写效率比C++高多了
qq和有道词典已经在很久前就嵌入cef了
2015-9-3 15:36
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
支持一下
2015-9-3 16:37
0
雪    币: 382
活跃值: (352)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
15
谁说没人维护了,等着哥的duilib for gtk
2015-9-11 15:21
0
雪    币: 80
活跃值: (87)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
htmlayout
2015-9-14 23:40
0
雪    币: 1037
活跃值: (117)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
这个好,支持顶!!!
2016-3-2 22:36
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
做好了是件大好事,谢谢!
2016-10-30 12:23
0
游客
登录 | 注册 方可回帖
返回
//