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