比起介紹“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