duilib入门教程
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入门教程相关推荐
- 2013 duilib入门简明教程 -- 总结 (20)
原文地址为: 2013 duilib入门简明教程 -- 总结 (20) duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第 387个版本,时间是2013.08. ...
- duilib入门简明教程 -- VS环境配置(2) (转)
原文转自:http://www.cnblogs.com/Alberl/p/3342030.html 既然是入门教程,那当然得基础点,因为搜索duilib相关资料时,发现有些小伙伴到处都是编译错 ...
- duilib入门简明教程 -- 部分bug (11) (转)
原文转自:http://www.cnblogs.com/Alberl/p/3344886.html 一.WindowImplBase的bug 在第8个教程[2013 duilib入门简明教程 -- 完 ...
- duilib入门简明教程 -- 前言(1) (转)
原文转自 :http://www.cnblogs.com/Alberl/p/3341956.html 关于duilib的介绍就不多讲了,一来不熟,二来小伙伴们想必已经对比了多个界面库,也无需赘述.下面 ...
- duilib入门简明教程 -- 前言(1)
关于duilib的介绍就不多讲了,一来不熟,二来小伙伴们想必已经对比了多个界面库,也无需赘述.下面进入正题: 不看广告看疗效! 已有众多知名公司采用duilib做为界面库,如华为网盘.金山快盘.酷我音 ...
- DuiLib入门简明教程
Duilib 是一款强大的界面开发工具,可以将用户界面和处理逻辑彻底分离,极大地提高用户界面的开发效率. 国内首个开源 的directui 界面库,开放,共享,惠众,共赢,遵循bsd协议 ...
- duilib教程之duilib入门简明教程9.界面布局
上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...
- duilib教程之duilib入门简明教程 -- 界面布局(9)
上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...
- 2013 duilib入门简明教程 -- 界面布局(9)
上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...
- duilib进阶教程 -- 在MFC中使用duilib (1)
由于入门教程的反响还不错,因此Alberl就以直播的形式来写<进阶教程>啦,本教程的前提: 1.请先阅读<仿迅雷播放器教程> 2.要有一定的duilib基础,如果还没,请先阅读 ...
最新文章
- Oracle数据库—— 事务处理与并发控制
- Hibernate Synchronizer3——一个和hibernate Tool类似的小插件之使用方法
- vue项目职责_进大厂兼职的机会来了!腾讯微校项目招人了!
- python通讯录管理系统 tk_通讯录管理系统课程设计
- 零基础入门深度学习(4) - 卷积神经网络
- 深入浅出VC++串口编程--第三方类
- 有哪些越早知道越好的人生经验?
- python caffe框架_caffe框架基础
- 一种基于HBase韵海量图片存储技术
- 知乎18万赞回答:真正厉害的人,是怎么分析问题的?
- Rediskey的基本操作
- Mac中设置右键新建TXT文件
- python写整数逆位运算_整数逆位运算
- 上周热点回顾(10.18-10.24)
- python股票查询可视化代码
- 如何在Java中以编程方式阅读,添加或删除PPT中的幻灯片便笺?
- vue遇到的小问题,封装功能
- API管理神器:Apifox
- EventBus的理解和使用
- JSP页面禁用EL表达式的原因和实现方法
热门文章
- RxJava:concat(连接)、 concatDelayError、 concatEager的使用
- 杰里之AC897N_AD697N_earphone_release_ V2.0.1 开立体声左右声道数据对调【篇】
- 电子电路仿真软件中文版_一个电子工程师的自我修养
- 仿美洽客服系统-gin框架内核独立自主源码开发在线客服系统
- 网友对各种杀软的评价诗歌
- 【毕业设计】深度学习 python opencv 火焰检测识别
- Android CheckBoxPreference设置默认值会触发持久化以及其内部实现逻辑
- EMC RS485接口EMC电路设计方案
- 计算机的硬件软件组成
- redis集群的远程管理与监控