序言git
Duilib介紹
Duilib是windows平臺下的一款輕量級directUI開源庫(遵循BSD協議),徹底免費,可用於商業軟件開發,只需在軟件包裏附上協議文件便可。Duilib能夠簡單方便地實現大多數界面需求,包括換膚、換色,透明等功能,支持多種圖片格式,使用XML能夠方便地定製窗口,能較好地作到UI和邏輯相分離,儘可能減小在代碼裏建立UI控件。目前,Duilib庫已經漸趨穩定,目前在國內有較爲普遍的使用,網絡上也有不少的使用教程。github
網易雲信Duilib介紹
Duilib是在研發易信PC版時被引入,歷經六七年的研發過程,相對於原版Duilib,網易雲信Duilib修復了一些問題和不足,包括但不限於控件種類不豐富、不支持動畫、不支持半透明異形窗體、對多線程支持很差等,目前,網易雲信Duilib配合比較高效的引擎庫Base解決多線程問題,能夠作出功能更強更穩定的客戶端界面。segmentfault
網易雲信Duilib特點
多國語言支持
通用樣式支持
DPI 縮放支持
GIF 動畫支持
CEF 控件支持(CEF 2623 支持 XP)
觸控設備支持(Surface、Wacom)
抽象渲染接口(爲其餘渲染引擎提供支持)windows
源碼使用
克隆項目到你的磁盤中
git clone https://github.com/netease-im...
進入 NIM_Duilib_Framework/samples 目錄,使用 Visual Studio 2013 Update 5 以上版本 IDE 打開 samples.sln。 網絡
工程目錄結構
bin輸出目錄
docs 文檔
libs 靜態庫
samples 示例Demo程序
third_party 第三方庫
toolkits
─ base 基礎類庫
─ duilib 核心代碼
─ shared 工具類庫
─ ui_components 組件庫數據結構
模塊介紹
Bin:輸出目錄,各個示例程序輸出目錄,包含預設的皮膚和語言文件以及 CEF 依賴。
Docs:文檔,duilib 接口的說明文檔。
Libs:靜態庫,靜態庫編譯後的輸出目錄,包含預設的一些 CEF 組件靜態庫。
Samples:示例Demo程序。
Third_party:第三方庫,目前僅有 cef_control 有依賴。
Base:基礎類庫,提供了基本框架Messageloops,閉包,基本函數庫(file、network等),基本類庫(time,線程,定時器等),基本工具庫(log,加解密)等。
Duilib:duilib 核心代碼,依賴 base 但不依賴 shared。
Shared:工具共享庫,對base庫,第三方庫作的簡單的封裝,如命令行解析、日誌、路徑處理,供其餘模塊使用。
ui_components:組件庫,基於 duilib 封裝的經常使用組件庫如 msgbox、toast、cef_control 等。多線程
控件介紹
容器
容器可做爲容器控件的介質,包含經常使用的水平佈局和垂直佈局等容器。在一個程序界面開始設計前首先要考慮整個界面的佈局,這就要用到容器。不一樣的容器有不一樣的佈局樣式,如下爲支持的容器類型,可根據本身須要選擇進行佈局。
Box 自由佈局容器
HBox 水平佈局容器
VBox 垂直佈局容器
TabBox 多標籤佈局容器
TileBox 格子布局容器
ScrollableBox 帶有滾動條的佈局容器
ChildBox 子佈局容器
列表
此目錄下包含一些列表容器,方便管理同類型的多份數據,如下列舉了可用的列表容器。
Combo 下拉列表
ListBox 普通列表
TreeView 屬性列表
VirtualListBox 虛擬列表
控件
控件包含了全部可用的獨立控件,如按鈕、文本、進度條等,提供用戶輸入或輸出內容提供使用者查看。如下列舉了全部可用的控件列表。
Window 用於容納全部控件的窗口,這裏暫時放到控件分類中
Control 全部控件的基類,包含了控件的基本屬性和接口
Button 按鈕控件
CheckBox 複選框
Option 單選框
Label 文本
Progress 進度條
Slider 滑動條
RichEdit 富文本
ScrollBar 滾動條
CefControl CEF 控件
盒子
盒子一般用於容納一組不一樣的控件但由整個盒子統一響應用戶觸發的事件。不一樣於普通的容器或普通的控件,它們具備容器的基本佈局功能,也具有控件的事件響應機制。
通常用於列表中顯示一個子項,或者樹形列表中顯示一個節點,但這些子項和節點可能包含豐富的圖標和文字描述並要求能夠響應用戶觸發的事件。在這種場景下就會使用到這些盒子了,如下爲支持的盒子模型:
ListContainerElement 經常使用於列表中顯示一個子項
TreeNode 經常使用於樹形列表中顯示一個子節點
Other 一些其餘的盒子模型
工具
DPI Manager DPI 管理
Muilt Language 多語言管理
Shadow 陰影管理
Window Base 窗口基礎幫助類閉包
應用開發框架介紹
線程模型和消息隊列
線程模型參考Chromium基於異步通訊的多線程模型。
一個線程請求另外一個線程執行任務的時候,只需將任務封裝成一個閉包投遞到對方線程的任務隊列便可,無需等待,減小卡頓。架構
相比於常見的基於鎖的線程運行模式,減小了鎖的開銷,提升了線程的響應性。
這種基於異步通訊的多線程模型,要求設計好各個子模塊及其對應的數據結構,使得在協做時能夠最大程度地進行異步通訊。框架
引用
該文多爲網易雲信公開技術文檔部分摘抄,如需詳細閱讀請進入如下傳輸門:
https://github.com/netease-im...
https://github.com/netease-im...
NIM Windows(PC)Demo導讀
感謝
Duilib自己來自於開源社區,現在咱們經過回饋開源社區,但願繼續致力於與社區一塊兒建立開發平臺。咱們的Windows應用界面開發框架已經準備好在GitHub上作出貢獻:https://github.com/netease-im...。開源該技術提升了產品團隊與開發者之間的透明度,有助於Windows開發的普及,並使開發者可以參與並對這些開源技術作出持續貢獻。
最後,感謝曾經以及現在還在爲網易雲信Duilib貢獻代碼的小夥伴們,包括但不限於陽光,redrain,harrison等等大佬們。
想要閱讀更多技術乾貨、行業洞察,歡迎關注網易雲信博客。
瞭解網易雲信,來自網易核心架構的通訊與視頻雲服務。
__
網易雲信(NeteaseYunXin)是集網易18年IM以及音視頻技術打造的PaaS服務產品,來自網易核心技術架構的通訊與視頻雲服務,穩定易用且功能全面,致力於提供全球領先的技術能力和場景化解決方案。開發者經過集成客戶端SDK和雲端OPEN API,便可快速實現包含IM、音視頻通話、直播、點播、互動白板、短信等功能。