NIM_Duilib刚刚开始开源的时候我就注意到了这个项目,因为一直在用Duilib,并且对DirectUI这种方式很认同,加上NIM_Duilib仓库的控件截图相比于Duilib要美化不少,所以当时马上就克隆了NIM_Duilib的仓库进行了编译,不过当时出现了很多的编译问题,加上当时有项目在手上需要赶进度,所以马上就弃坑了,今天刚刚好有时间那就重新开始认识NIM_Duilib吧。

1 NIM_Duilib是什么?

Duilib是windows平台下的一款轻量级directUI开源库(遵循BSD协议),完全免费,可用于商业软件开发,只需在软件包里附上协议文件即可。Duilib可以简单方便地实现大多数界面需求,包括换肤、换色,透明等功能,支持多种图片格式,使用XML可以方便地定制窗口,能较好地做到UI和逻辑相分离,尽量减少在代码里创建UI控件。目前,Duilib库已经渐趋稳定,目前在国内有较为广泛的使用,网络上也有很多的使用教程。

Duilib是网易在研发易信PC版时被引入,历经六七年的研发过程,相对于原版Duilib,网易云信Duilib修复了一些问题和不足,包括但不限于控件种类不丰富、不支持动画、不支持半透明异形窗体、对多线程支持不好等,目前,网易云信Duilib配合比较高效的引擎库Base解决多线程问题,可以做出功能更强更稳定的客户端界面。NIM Duilib 包含了一整套桌面软件的开发部件,与其说这是一个界面库,不如说它是一个开发框架。从原有 Duilib 基础上拓展了一些新的能力,并整合了 Google base 基础类库(线程、内存、闭包等)。

github地址:https://github.com/netease-im/NIM_Duilib_Framework

2 在Visual Studio 2019中编译NIM_Duilib

2.1 克隆仓库并切换到develop分支

使用以下命令克隆仓库

git clone https://github.com/netease-im/NIM_Duilib_Framework.git

这里需要注意的是我们需要将仓库切换到develop分支,原本的master分支在编译libcef_dll_wrapper项目时会出现以下错误

error: C2039 "_Ref_count_obj": 不是 "std" 的成员

参考这个issue:https://github.com/netease-im/NIM_Duilib_Framework/issues/363

2.2 编译项目

切换分支之后,进入仓库根目录下的example文件夹,使用Visual Studio 2019打开example.sln项目文件

然后依次修改base、duilib、ui_components、以及third_party下的libcef_dll_wrapper项目的属性。

在配置属性-常规中的平台工具集修改为Visual Studio 2019 (v142),Windows SDK版本选择本机上安装的SDK版本即可。

NIM_Duilib  – 使用Visual Studio编译NIM_Duilib-StubbornHuang Blog

修改完成之后编译即可。

2.3 编译输出

各个项目编译完成之后,可以在仓库根目录下的libs文件夹找到所编译的静态库。

  • 32位静态库输出目录为libs
  • 64位静态库输出目录为libs/x64。
  • Debug静态库为:base_d.lib、duilib_d.lib、libcef_dll_wrapper_d.lib、ui_components_d.lib
  • Release静态库为:base.lib、duilib.lib、libcef_dll_wrapper.lib、ui_components.lib

后面我们配置NIM_Duilib新项目是需要引入这些静态库。