序言

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

NIM Windows(PC)Demo导读

感谢

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应用界面开发框架源码开源介绍的更多相关文章

  1. 升讯威微信营销系统开发实践:(5) Github 源码:微信接口的 .NET 封装。

    微信开发系列教程,将以一个实际的微信平台项目为案例,深入浅出的讲解微信开发.应用各环节的实现方案和技术细节. 本系列教程的最终目标是完成一个功能完善并达到高可用性能指标的微信管理软件,所以除了与微信本 ...

  2. 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

    作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...

  3. 【资料目录收藏】.NET开发必看资料53个 经典源码77个

    简单描述:为大家整理了下载中心.net资料,都是比较热的,好评率比较高的,做了一个可收藏的下载目录,希望大家喜欢~ 基于.net构架的留言板项目大全源码 http://down.51cto.com/z ...

  4. .NET开发必看资料53个+经典源码77个

    目录0豆下载:http://down.51cto.com/data/426019 附件预览: 基于.net构架的留言板项目大全源码 http://down.51cto.com/zt/70 ASP.ne ...

  5. 微信公众平台开发-access_token获取及应用(含源码)

    微信公众平台开发-access_token获取及应用(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 很多系统中都有access_token参数,对于微信公众平台的access_to ...

  6. kafka原理和实践(三)spring-kafka生产者源码

    系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...

  7. kafka原理和实践(四)spring-kafka消费者源码

    系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...

  8. SpringMVC+Maven开发项目源码详细介绍

    代码地址如下:http://www.demodashi.com/demo/11638.html Spring MVC概述 Spring MVC框架是一个开源的Java平台,为开发强大的基于Java的W ...

  9. openlayers5-webpack 入门开发系列结合 echarts4 实现散点图(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

随机推荐

  1. 50元求解pyqt加载并显示pdf问题

    50块钱求解决pyqt5加载pdf文档并显示,类似briss软件的效果

  2. 基于SSM开发大学食堂采购管理系统源码

    开发环境: Windows操作系统开发工具: Eclipse+Jdk+Tomcat+MySQL数据库 次项目分为管理员和普通用户两种角色 运行效果图

  3. 如何在vue-cli中使用vuex(配置成功

    前言 众所周知,vuex 是一个专为 vue.js 应用程序开发的状态管理模式,在构建一个中大型单页应用中使用vuex可以帮助我们更好地在组件外部管理状态.而vue-cli是vue的官方脚手架,它能帮 ...

  4. JBPM4 学习笔记 转

    关于JBPM工作流 2.        JBPM jBPM,全称是Java Business Process Management,是一种基于J2EE的轻量级工作流管理系统.JBPM使用Hiberna ...

  5. linq to sql 比较字符串形式的时间

    where Convert.ToDateTime(t.Date.Trim()).CompareTo(Convert.ToDateTime("2009/9/9")) >= 0 ...

  6. EF Code-First(Oracle)通过Migration来更新数据库的表的字段

    关于Oracle中使用Entity Framework 6.x Code-First方式开发,请参考博客(菩提树下的杨过)https://www.cnblogs.com/yjmyzz/p/how-to ...

  7. Docker最全教程——从理论到实战(十九)

    Python目前是流行度增长最快的主流编程语言,也是第二大最受开发者喜爱的语言(参考Stack Overflow 2019开发者调查报告发布).笔者建议.NET.Java开发人员可以将Python发展 ...

  8. Log4net实用说明

    Log4net实用说明 Appender Filter Layout Logger ObjectRender Repository PatterLayout格式化字符表 配置文件说明 Appender ...

  9. Git常用命令简记

    创建仓库 添加需要版本控制的文件到仓库中 提交到版本库 修改位于顶端的commit的日志 分支管理 版本回退 切换与合并分支 本地版本库与远程关联 克隆 Tag的使用 问题与解决 创建git仓库 gi ...

  10. mysql权限过滤

    1.用like做权限过滤 上级部门可以看到下级部门发布的正式文件,下级部门不能看到上级部门发布的正式文件 SELECT*FROM cms_nrgl_st a, mz_xzjg bWHERE a.sys ...