比起介紹“ Duilib是什么?”,更重要的應該是了解“ Duilib解決什么問題?”
Duilib解決什么問題?
先聊聊一個話題:怎樣做一個有界面的軟件?
方案一、自己畫界面
最原始的辦法是自己繪制界面的所有點線面。
操作系統提供了繪制的接口(Windows API):GDI。
GDI(Graphics Device Interface圖形設備接口)提供以下功能:
繪制一個像素點:SetPixel()。
繪制直線:MoveTo(),LineTo()。
繪制多個首尾相連的線:Polyline()。
繪制矩形:FrameRect(),Rectangle()。
優點是可以自由設計界面長什么樣,缺點就是太麻煩了,要控制所有細節。
方案二、使用標准控件
Windows對GDI進行進一步封裝,提供了多種標准控件,比如:按鈕、編輯框這些。
優點是寫界面只是把多個控件組合起來,缺點這些控件是固定的,比較難調整。
方案三、使用Duilib框架
使用GDI:靈活但不方便;
使用標准控件:方便但不靈活;
想要靈活又方便,就需要結合兩者的優勢。
Duilib也對GDI進行了封裝,提供基本的控件(按鈕、編輯框等),方便使用。
但和Windows的標准控件不一樣,Duilib提供的控件有多個參數可以靈活調整。
綜上所述,Duilib要解決的問題就是:怎樣方便又靈活地編寫一個小而美的界面軟件?
Duilib是什么?
先看下Duilib官方簡介
Duilib是一個Windows下免費開源的DirectUI界面庫,由於簡約易擴展的設計以及穩定高效的實現被各大互聯網公司普遍接受,廣泛應用於包括IM、視頻客戶端、股票行情軟件、導航軟件、手機輔助軟件、安全軟件等多個行業的眾多pc客戶端軟件。Duilib還在不斷的發展中,在文檔、例子、動畫、渲染引擎等多個方面將持續改進。
再看下DirectUI 百度百科
DirectUI意為直接在父窗口上繪圖(Paint on parent dc directly)。即子窗口不以窗口句柄 的形式創建(windowless),只是邏輯上的窗口,繪制在父窗口之上。
簡單來說,Duilib是一個自繪控件的界面庫,使用Duilib可以開發小而美的界面軟件。
用Duilib寫一個界面軟件,只需要用一個xml文件描述界面長什么樣,然后在代碼中寫上操作界面之后怎么處理就可以了。這里摘取一下關鍵的代碼:
// 界面上顯示一個按鈕 按鈕名字為btn
<Button name="btn" text="按鈕" />
// 點擊按鈕對應的處理函數
if (msg.sType == _T("click")) // 判斷是不是點擊事件
{
if (msg.pSender->GetName() == _T("btn"));// 判斷是不是 btn 按鈕
{
::MessageBox(NULL, _T("我是按鈕"), _T("點擊了按鈕"), NULL);
}
}
Duilib技術交流群:799142530
源碼地址:https://github.com/KongKong20/DuilibTutor