duilib使用手册

1.简介

duilib是一个开源 的directui 界面库,使用XML来描述界面风格,界面布局,将界面与逻辑分离,能够快速开发美观的界面。

2.代码下载与编译

2.1代码下载

github网址:https://github.com/duilib/duilib
下载后的代码结构如下:

2.2编译

打开根目录的Duilib.sln,github上的工程是VS2013的,使用VS2017打开时,会提示升级工程,点升级即可。如果没有升级成功,在工程配置中修改如下选项,选择win10的sdk和VS2017的工具集。

按照如下要求修改文件编码,解决由于编码格式的问题会导致vs2017下编码失败的问题。

根据实际需求,选择对应的工程配置,静态库或者动态库,Unicode或者多字节等等。

选择好工程配置之后,编译工程DuiLib即可。
注意:生成duilib静态库时,需要添加预编译宏UILIB_STATIC

3.使用

3.1库链接与头文件包含

使用duilib界面库,可以分为动态链接和静态链接两种方式。

1.静态链接
工程配置中添加对duilib.lib静态库的链接,并且添加预定义宏UILIB_STATIC

2.动态链接
将生成的duilib.dll拷贝到输出文件的同级目录下,同时添加对导入库duilib.lib的静态链接。

3.头文件
将如下标记的文件和文件夹拷贝,使用时包含UIlib.h文件即可。

3.2代码中的使用

duilib提供了一个封装类WindowImplBase,从该类继承,并重写部分函数即可,详情参考demo代码:

#include "..\DuiLib\UIlib.h"#ifdef _DEBUG
#   ifdef _UNICODE
#       pragma comment(lib, "DuiLib_ud.lib")
#   else
#       pragma comment(lib, "DuiLib_d.lib")
#   endif
#else
#   ifdef _UNICODE
#       pragma comment(lib, "DuiLib_u.lib")
#   else
#       pragma comment(lib, "DuiLib.lib")
#   endif
#endifusing namespace DuiLib;class TestFrame : public WindowImplBase
{
public:TestFrame(){}~TestFrame(){}virtual CDuiString GetSkinFolder(){return _T("");}virtual CDuiString GetSkinFile(){return _T("demo.xml");}virtual LPCTSTR GetWindowClassName(void) const{return _T("TestWindowClass");}virtual LRESULT OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled){PostQuitMessage(0);return 0;}virtual void Notify(TNotifyUI& msg){if (msg.sType == _T("click")){if (msg.pSender->GetName() == _T("buttonName1")){::MessageBox(NULL, _T("buttonName1 has been clicked"), _T(""), NULL);}}}private:};int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow)
{CPaintManagerUI::SetInstance(hInstance);HRESULT Hr = ::CoInitialize(NULL);if (FAILED(Hr)) return 0;TestFrame* pFrame = new TestFrame();if (pFrame == NULL) return 0;pFrame->Create(NULL, _T("TestWindow"), UI_WNDSTYLE_FRAME, 0, 0, 0, 0, 0);pFrame->CenterWindow();::ShowWindow(*pFrame, SW_SHOW);CPaintManagerUI::MessageLoop();::CoUninitialize();return 0;
}

对应的xml布局文件:

<?xml version="1.0" encoding="UTF-8"?>
<Window size="600,360"><VerticalLayout bkcolor="0xFF87CEEB"><Control /><HorizontalLayout height="40"><Control /><Button name="button1" text="button1" width="80" height="40" bkcolor="0xFF228B22" /><Control /></HorizontalLayout><Control /></VerticalLayout>
</Window>

运行结果:

关于duiliib的详细用法,可以参考源码工程中的demo,基本列举了所有控件的用法,包括各种布局情况。也可以参考博客:
duilib布局详解
duilib属性列表

转载于:https://www.cnblogs.com/lzm-cn/p/11422558.html

duilib入门教程相关推荐

  1. 2013 duilib入门简明教程 -- 总结 (20)

    原文地址为: 2013 duilib入门简明教程 -- 总结 (20) duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第 387个版本,时间是2013.08. ...

  2. duilib入门简明教程 -- VS环境配置(2) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3342030.html     既然是入门教程,那当然得基础点,因为搜索duilib相关资料时,发现有些小伙伴到处都是编译错 ...

  3. duilib入门简明教程 -- 部分bug (11) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3344886.html 一.WindowImplBase的bug 在第8个教程[2013 duilib入门简明教程 -- 完 ...

  4. duilib入门简明教程 -- 前言(1) (转)

    原文转自 :http://www.cnblogs.com/Alberl/p/3341956.html 关于duilib的介绍就不多讲了,一来不熟,二来小伙伴们想必已经对比了多个界面库,也无需赘述.下面 ...

  5. duilib入门简明教程 -- 前言(1)

    关于duilib的介绍就不多讲了,一来不熟,二来小伙伴们想必已经对比了多个界面库,也无需赘述.下面进入正题: 不看广告看疗效! 已有众多知名公司采用duilib做为界面库,如华为网盘.金山快盘.酷我音 ...

  6. DuiLib入门简明教程

           Duilib 是一款强大的界面开发工具,可以将用户界面和处理逻辑彻底分离,极大地提高用户界面的开发效率. 国内首个开源 的directui 界面库,开放,共享,惠众,共赢,遵循bsd协议 ...

  7. duilib教程之duilib入门简明教程9.界面布局

    上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...

  8. duilib教程之duilib入门简明教程 -- 界面布局(9)

    上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...

  9. 2013 duilib入门简明教程 -- 界面布局(9)

    上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...

  10. duilib进阶教程 -- 在MFC中使用duilib (1)

    由于入门教程的反响还不错,因此Alberl就以直播的形式来写<进阶教程>啦,本教程的前提: 1.请先阅读<仿迅雷播放器教程> 2.要有一定的duilib基础,如果还没,请先阅读 ...

最新文章

  1. Oracle数据库—— 事务处理与并发控制
  2. Hibernate Synchronizer3——一个和hibernate Tool类似的小插件之使用方法
  3. vue项目职责_进大厂兼职的机会来了!腾讯微校项目招人了!
  4. python通讯录管理系统 tk_通讯录管理系统课程设计
  5. 零基础入门深度学习(4) - 卷积神经网络
  6. 深入浅出VC++串口编程--第三方类
  7. 有哪些越早知道越好的人生经验?
  8. python caffe框架_caffe框架基础
  9. 一种基于HBase韵海量图片存储技术
  10. 知乎18万赞回答:真正厉害的人,是怎么分析问题的?
  11. Rediskey的基本操作
  12. Mac中设置右键新建TXT文件
  13. python写整数逆位运算_整数逆位运算
  14. 上周热点回顾(10.18-10.24)
  15. python股票查询可视化代码
  16. 如何在Java中以编程方式阅读,添加或删除PPT中的幻灯片便笺?
  17. vue遇到的小问题,封装功能
  18. API管理神器:Apifox
  19. EventBus的理解和使用
  20. JSP页面禁用EL表达式的原因和实现方法

热门文章

  1. RxJava:concat(连接)、 concatDelayError、 concatEager的使用
  2. 杰里之AC897N_AD697N_earphone_release_ V2.0.1 开立体声左右声道数据对调【篇】
  3. 电子电路仿真软件中文版_一个电子工程师的自我修养
  4. 仿美洽客服系统-gin框架内核独立自主源码开发在线客服系统
  5. 网友对各种杀软的评价诗歌
  6. 【毕业设计】深度学习 python opencv 火焰检测识别
  7. Android CheckBoxPreference设置默认值会触发持久化以及其内部实现逻辑
  8. EMC RS485接口EMC电路设计方案
  9. 计算机的硬件软件组成
  10. redis集群的远程管理与监控