网易云信Duilib开发实践和Windows应用界面开发框架源码开源介绍
序言
Duilib介绍
Duilib是windows平台下的一款轻量级directUI开源库(遵循BSD协议),完全免费,可用于商业软件开发,只需在软件包里附上协议文件即可。Duilib可以简单方便地实现大多数界面需求,包括换肤、换色,透明等功能,支持多种图片格式,使用XML可以方便地定制窗口,能较好地做到UI和逻辑相分离,尽量减少在代码里创建UI控件。目前,Duilib库已经渐趋稳定,目前在国内有较为广泛的使用,网络上也有很多的使用教程。
网易云信Duilib介绍
Duilib是在研发易信PC版时被引入,历经六七年的研发过程,相对于原版Duilib,网易云信Duilib修复了一些问题和不足,包括但不限于控件种类不丰富、不支持动画、不支持半透明异形窗体、对多线程支持不好等,目前,网易云信Duilib配合比较高效的引擎库Base解决多线程问题,可以做出功能更强更稳定的客户端界面。
网易云信Duilib特色
l 多国语言支持
l 通用样式支持
l DPI 缩放支持
l GIF 动画支持
l CEF 控件支持(CEF 2623 支持 XP)
l 触控设备支持(Surface、Wacom)
l 抽象渲染接口(为其他渲染引擎提供支持)
源码使用
克隆项目到你的磁盘中
git clone https://github.com/netease-im/NIM_Duilib_Framework
进入 NIM_Duilib_Framework/samples 目录,使用 Visual Studio 2013 Update 5 以上版本 IDE 打开 samples.sln。
工程目录结构
l bin输出目录
l docs 文档
l libs 静态库
l samples 示例Demo程序
l third_party 第三方库
l toolkits
─ base 基础类库
─ duilib 核心代码
─ shared 工具类库
─ ui_components 组件库
模块介绍
l Bin:输出目录,各个示例程序输出目录,包含预设的皮肤和语言文件以及 CEF 依赖。
l Docs:文档,duilib 接口的说明文档。
l Libs:静态库,静态库编译后的输出目录,包含预设的一些 CEF 组件静态库。
l Samples:示例Demo程序。
l Third_party:第三方库,目前仅有 cef_control 有依赖。
l Base:基础类库,提供了基本框架Messageloops,闭包,基本函数库(file、network等),基本类库(time,线程,定时器等),基本工具库(log,加解密)等
l Duilib:duilib 核心代码,依赖 base 但不依赖 shared
l Shared:工具共享库,对base库,第三方库做的简单的封装,如命令行解析、日志、路径处理,供其他模块使用。
l ui_components:组件库,基于 duilib 封装的常用组件库如 msgbox、toast、cef_control 等
控件介绍
容器
容器可作为容器控件的介质,包含常用的水平布局和垂直布局等容器。在一个程序界面开始设计前首先要考虑整个界面的布局,这就要用到容器。不同的容器有不同的布局样式,以下为支持的容器类型,可根据自己需要选择进行布局。
l Box 自由布局容器
l HBox 水平布局容器
l VBox 垂直布局容器
l TabBox 多标签布局容器
l TileBox 格子布局容器
l ScrollableBox 带有滚动条的布局容器
l ChildBox 子布局容器
列表
此目录下包含一些列表容器,方便管理同类型的多份数据,以下列举了可用的列表容器。
l Combo 下拉列表
l ListBox 普通列表
l TreeView 属性列表
l VirtualListBox 虚拟列表
控件
控件包含了所有可用的独立控件,如按钮、文本、进度条等,提供用户输入或输出内容提供使用者查看。以下列举了所有可用的控件列表。
l Window 用于容纳所有控件的窗口,这里暂时放到控件分类中
l Control 所有控件的基类,包含了控件的基本属性和接口
l Button 按钮控件
l CheckBox 复选框
l Option 单选框
l Label 文本
l Progress 进度条
l Slider 滑动条
l RichEdit 富文本
l ScrollBar 滚动条
l CefControl CEF 控件
盒子
盒子通常用于容纳一组不同的控件但由整个盒子统一响应用户触发的事件。不同于普通的容器或普通的控件,它们具有容器的基本布局功能,也具备控件的事件响应机制。
一般用于列表中显示一个子项,或者树形列表中显示一个节点,但这些子项和节点可能包含丰富的图标和文字描述并要求可以响应用户触发的事件。在这种场景下就会使用到这些盒子了,以下为支持的盒子模型:
l ListContainerElement 常用于列表中显示一个子项
l TreeNode 常用于树形列表中显示一个子节点
l Other 一些其他的盒子模型
工具
l DPI Manager DPI 管理
l Muilt Language 多语言管理
l Shadow 阴影管理
l Window Base 窗口基础帮助类
应用开发框架介绍
线程模型和消息队列
l 线程模型参考Chromium基于异步通信的多线程模型。
l 一个线程请求另一个线程执行任务的时候,只需将任务封装成一个闭包投递到对方线程的任务队列即可,无需等待,减少卡顿。
l 相比于常见的基于锁的线程运行模式,减少了锁的开销,提高了线程的响应性。
l 这种基于异步通信的多线程模型,要求设计好各个子模块及其对应的数据结构,使得在协作时可以最大程度地进行异步通信。
引用
该文多为网易云信公开技术文档部分摘抄,如需详细阅读请进入以下传输门:
https://github.com/netease-im/NIM_Duilib_Framework
https://github.com/netease-im/NIM_PC_UIKit/blob/master/doc/nim_duilib.md
感谢
Duilib本身来自于开源社区,如今我们通过回馈开源社区,希望继续致力于与社区一起创建开发平台。我们的Windows应用界面开发框架已经准备好在GitHub上做出贡献:https://github.com/netease-im/NIM_Duilib_Framework。开源该技术提高了产品团队与开发者之间的透明度,有助于Windows开发的普及,并使开发者能够参与并对这些开源技术做出持续贡献。
最后,感谢曾经以及如今还在为网易云信Duilib贡献代码的小伙伴们,包括但不限于阳光,redrain,harrison等等大佬们。
想要阅读更多技术干货、行业洞察,欢迎关注网易云信博客。
了解网易云信,来自网易核心架构的通信与视频云服务。
网易云信(NeteaseYunXin)是集网易18年IM以及音视频技术打造的PaaS服务产品,来自网易核心技术架构的通信与视频云服务,稳定易用且功能全面,致力于提供全球领先的技术能力和场景化解决方案。开发者通过集成客户端SDK和云端OPEN API,即可快速实现包含IM、音视频通话、直播、点播、互动白板、短信等功能。
网易云信Duilib开发实践和Windows应用界面开发框架源码开源介绍的更多相关文章
- 升讯威微信营销系统开发实践:(5) Github 源码:微信接口的 .NET 封装。
微信开发系列教程,将以一个实际的微信平台项目为案例,深入浅出的讲解微信开发.应用各环节的实现方案和技术细节. 本系列教程的最终目标是完成一个功能完善并达到高可用性能指标的微信管理软件,所以除了与微信本 ...
- 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...
- 【资料目录收藏】.NET开发必看资料53个 经典源码77个
简单描述:为大家整理了下载中心.net资料,都是比较热的,好评率比较高的,做了一个可收藏的下载目录,希望大家喜欢~ 基于.net构架的留言板项目大全源码 http://down.51cto.com/z ...
- .NET开发必看资料53个+经典源码77个
目录0豆下载:http://down.51cto.com/data/426019 附件预览: 基于.net构架的留言板项目大全源码 http://down.51cto.com/zt/70 ASP.ne ...
- 微信公众平台开发-access_token获取及应用(含源码)
微信公众平台开发-access_token获取及应用(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 很多系统中都有access_token参数,对于微信公众平台的access_to ...
- kafka原理和实践(三)spring-kafka生产者源码
系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...
- kafka原理和实践(四)spring-kafka消费者源码
系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...
- SpringMVC+Maven开发项目源码详细介绍
代码地址如下:http://www.demodashi.com/demo/11638.html Spring MVC概述 Spring MVC框架是一个开源的Java平台,为开发强大的基于Java的W ...
- openlayers5-webpack 入门开发系列结合 echarts4 实现散点图(附源码下载)
前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...
随机推荐
- 逻辑卷管理(LVM)-迁移
逻辑卷管理(LVM)-迁移 更换卷组中逻辑卷中的一块硬盘流程:1确保卷组剩余空间大于需要更换的空间(缩减或添加添加新空间)-2迁移-3从卷组删除-4删除物理卷 #移除sdc1 1.查看卷组可用空间是否 ...
- spring cloud微服务快速教程之(八) Spring Cloud Alibaba--nacos(二)、配置中心
0-前言 上一篇我们介绍了nacos作为服务注册发现组件的功能,nacos还具有配置中心的功能,而且支持热加载: 在此之前,配置中心有Spring Cloud Config,实际上,用这个有很多风险和 ...
- android中常用的布局管理器
Android中的几种常用的布局,主要介绍内容有: View视图 RelativeLayout 相对布局管理器 LinearLayout 线性布局管理器 FrameLayout ...
- 在服务器上安装并配置JDK1.8
参考链接:https://blog.csdn.net/qq_40958000/article/details/83996912
- Spring-Cloud微服务踩坑
@feignclient和@requestmapping混用的时候出错 重写springmvc扫描controller时不带有@feignclient才实例化 @Configuration @Cond ...
- web渗透漏洞靶场收集
最近将自己遇到过或者知道的web靶场链接奉上 0X01 DVWA 推荐新手首选靶场,配置简单,需下载phpstudy和靶场文件包,简单部署之后即可访问. 包含了常见的web漏洞(php的),每个漏洞分 ...
- u盘变成Read-only file system
先查看U盘的设备号,然后修改后重新挂载 fdisk -l sudo dosfsck -v -a /dev/sdb4
- 题解【洛谷P1596】[USACO10OCT]Lake Counting
题面 \(\text{Flood Fill}\) 模板题. \(\text{Flood Fill}\) 可以快速求出一个图中连通块的个数. 大概就是遍历每一个点,如果它没有被遍历过且是一个新连通块,那 ...
- .Net Core 智能提示汉化包
在.Net Core 2.x 版本,Microsoft 官方没有提供 .Net Core 正式版的多语言安装包.因此,我们在用.Net Core 2.x 版本作为框架目标编写代码时,智能提成是英文的. ...
- 软件工程概论,java web项目
需要网站系统开发需要掌握的技术: 实施Java的WEB项目需要掌握的技术如:面向对象分析设计思想,设计模式和框架结构,XML语言,网页脚本语言,数据库,应用服务器,集成开发环境Java语言是完全面向对 ...