Duilib学习笔记(一)—— 环境搭建

  • Duilib简介
  • 源码编译
    • 工具
    • 步骤
  • 第一个Duilib项目

Duilib简介

Duilib 是一款强大的界面开发工具,可以将用户界面和处理逻辑彻底分离,极大地提高用户界面的开发效率,遵循bsd协议。

源码编译

工具

操作系统:Windows 10
编译器:Visual Studio 2019
Github源码:https://github.com/duilib/duilib

步骤

1)解压Duilib源码,将解压出来的「duilib-master」文件夹重命名为「Duilib」

2)使用Visual Studio 2019打开「DuiLib.sln」

3)若打开「DuiLib.sln」的过程中提示重定向项目(如下图),点击确定即可。

4)检查「解决方案资源管理器中」是否有项目存在”Visual Studio 2013 - Windows XP“字样

5)修改步骤4图中标红的项目属性(右键-属性),将平台工具集修改为Visual Studio 2019(若没有该项请使用Visual Studio Installer安装相关SDK)

6)编译

7)Duilib提供了四种项目配置,第一次编译这四个项目配置时,都需要从步骤4开始。

  • Debug:多字节字符集Debug版本
  • Release:多字节字符集Release版本
  • UnicodeDebug:Unicode字符集Debug版本
  • UnicodeRelease:Unicode字符集Release版本

8)成功编译后,尝试运行示例程序。

9)步骤7图中的所有版本可以先都编译一份,在开发时,可以根据需求选择使用不同版本。

第一个Duilib项目

参考资料:《duilib入门到精通》- 如何新建一个duilib项目(duilib视频教程)

1)创建新项目-Windows桌面向导

2)配置新项目

3)将编译好的Duilib源码中的DuiLib文件夹拷贝至当前项目的源代码所在路径中

4)将编译好的Duilib源码中的lib文件夹拷贝至当前项目的DuiLib文件夹中

5)在当前项目源码路径中创建一个skin文件夹,在里面新建一个demo.xml文件,用于配置控件信息

6)编写代码

//stdafx.h
//stdafx.h
#pragma once#define WIN32_LEAN_AND_MEAN             // 从 Windows 头文件中排除极少使用的内容
// Windows 头文件
#include <windows.h>// 包含库头文件
#include "DuiLib/UILib.h"
// 引入命名空间
using namespace DuiLib;// 导入lib库
#ifndef UNICODE#ifndef _DEBUG// Release版本的库#pragma comment(lib, "DuiLib\\lib\\Duilib.lib")#else// Debug版本的库#pragma comment(lib, "DuiLib\\lib\\Duilib_d.lib")#endif
#else#ifndef _DEBUG// Release版本的库#pragma comment(lib, "DuiLib\\lib\\Duilib_u.lib")#else// Debug版本的库#pragma comment(lib, "DuiLib\\lib\\Duilib_ud.lib")#endif
#endif
//CMainWnd.h
#pragma once#include "stdafx.h"
#include "DuiLib/Utils/WinImplBase.h"
#include "DuiLib/Core/UIDefine.h"class CMainWnd :public WindowImplBase
{public:CMainWnd(void);virtual ~CMainWnd(void);public:virtual CDuiString GetSkinFolder();virtual CDuiString GetSkinFile();virtual LPCTSTR GetWindowClassName(void) const;void Notify(TNotifyUI& msg);
};
//CMainWnd.cpp
#include "CMainWnd.h"CMainWnd::CMainWnd(void)
{}CMainWnd::~CMainWnd(void)
{}CDuiString CMainWnd::GetSkinFolder()
{return _T("");
}CDuiString CMainWnd::GetSkinFile()
{return _T("demo.xml");
}LPCTSTR CMainWnd::GetWindowClassName(void) const
{return _T("CMainWnd");
}void CMainWnd::Notify(TNotifyUI& msg)
{// 消息类型if (msg.sType == _T("click")) {// 控件名称CDuiString sName = msg.pSender->GetName();if (sName == _T("hello")) {Close(IDOK);// 如果不加这句,窗口关闭了,但程序不会退出PostQuitMessage(0);return;}}WindowImplBase::Notify(msg);
}
//TestDuilib.cpp
#include "stdafx.h"
#include "CMainWnd.h"int APIENTRY wWinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPWSTR    lpCmdLine,_In_ int       nCmdShow)
{UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);// 程序实例CPaintManagerUI::SetInstance(hInstance);// 配置资源路径// 资源类型//CPaintManagerUI::SetResourceType(UILIB_FILE);// 资源路径:执行程序同目录的Skin文件夹下// CPaintManagerUI::GetInstancePath() 执行程序目录CDuiString sResourcePath;sResourcePath.Format(_T("%s..\\TestDuilib\\skin"), CPaintManagerUI::GetInstancePath());//MessageBox(NULL, sResourcePath, _T("test"), MB_OK);CPaintManagerUI::SetResourcePath(sResourcePath);//实例化窗口CMainWnd* pMainWnd = new CMainWnd();// 创建窗口pMainWnd->Create(NULL, _T("TestDuilib"), WS_POPUP | WS_VISIBLE, 0);// 窗口居中显示pMainWnd->CenterWindow();// 启动消息循环CPaintManagerUI::MessageLoop();return 0;
}
<?xml version="1.0" encoding="utf-8"?>
<!--前面创建的skin目录中的demo.xml代码-->
<Window size="800, 600" caption="0,0,0,30"><VerticalLayout bkcolor="#ffffffff" childvalign="vcenter" childalign="center"><HorizontalLayout /><Button name="hello" bkcolor="#ffff0000" width="80" height="30" text="Hello World"/><HorizontalLayout /></VerticalLayout>
</Window>

7)编译,检查是否编译成功

8)若编译成功,此时运行会提示找不到Duilib_ud.dll文件

9)将编译好的Duilib源码中的bin目录中的Duilib_ud.dll拷贝至当前项目的Debug文件夹,和exe文件放在一起

10)此时再运行,就能够成功运行了
点击中间红色按钮即可关闭程序。

Duilib学习笔记(一)—— 环境搭建相关推荐

  1. 深度学习(二)theano学习笔记(1)环境搭建

    theano学习笔记(1)环境搭建 原文地址:http://blog.csdn.net/hjimce/article/details/46654229 作者:hjimce 搭建theano实属不易,因 ...

  2. Go学习笔记_环境搭建

    Go学习笔记_环境搭建 Go背景知识 go的特点(官网): Build fast, reliable, and efficient software at scale- Go is an open s ...

  3. Django学习笔记 开发环境搭建

    为什么使用django? 1.支持快速开发:用python开发:数据库ORM系统,并不需要我们手动地构造SQL语句,而是用python的对象访问数据库,能够提升开发效率. 2.大量内置应用:后台管理系 ...

  4. cocos2d-x lua 学习笔记(1) -- 环境搭建

    Cocos2d-x 3.0以上版本的环境搭建和之前的Cocos2d-x 2.0 版差异较大的,同时从Cocos2d-x 3.0项目打包成apk安卓应用文件,搭建安卓环境的步骤有点繁琐,但搭建一次之后, ...

  5. HarmonyOS_BearPi-HM Nano学习笔记之环境搭建

    前言:期待了已久的小熊派鸿蒙开发板终于出世了,12月11号准时抢到优惠券,果断下单,运费一起也就是29.9,实话说,很划算的,毕竟对自己的学习投资嘛,得舍得. 下面我把代码仓库.资料.视频课程地址贴出 ...

  6. 移植u-boot1.1.6到友善mini2440学习笔记之环境搭建(系列之一)

    前记:两年前就想学习ARM,由于一些原因耽搁了下来.如今迫于找硬件岗位工作的压力,不得不硬着头皮学习ARM,以前就知道ARM入门是计较困难的,如今真是体会深切啊,全是心酸泪,不仅自己的无知跟自己作对, ...

  7. Linux学习笔记1—环境搭建

    文章目录 一.Linux是什么? 二.购买云服务器搭建Linux环境 1 Xshell 1.1 Linux下简单的用户管理 1.2 Xshell的复制粘贴 2 vscode+RemoteSSH插件 3 ...

  8. wepy学习笔记之环境搭建

    写了近两年小程序了,越来越发现原生小程序有太多鸡肋的地方.所以今天准备尝试一下wepy,正好最近手上有个外包,可以拿来练手.如果可以的话,或许会出一系列wepy相关的文章(偏实战),欢迎大佬们指正. ...

  9. Python学习笔记1环境搭建+Numpy

    Python環境安裝 系統環境path裡面配置安裝路徑打開cmd輸入py查看是否安裝路徑:D:/sofeware/python3.8 配置系統環境變量(可以安裝時選擇本身就配置) [外链图片转存失败, ...

  10. node学习笔记_01 环境搭建

    一.下载安装nvm (node版本管理器),方便以后版本切换 nvm list            -> 查看node版本(版本最好在8.0以上,不然在vsCode断点调试进不去,跟node版 ...

最新文章

  1. 长篇自动驾驶技术综述论文(上)
  2. 【leetcode】85. Maximal Rectangle 0/1矩阵的最大全1子矩阵
  3. Ajax、Comet与Websocket
  4. OpenStack遇到的坑
  5. “面试不败计划“:hibernate和mybatis比较
  6. ajax jsp模糊查询源码,ajax模糊查询api
  7. jsonp react 获取返回值_Django+React全栈开发:文章列表
  8. 千万别被“读书无用”给害了
  9. WinForm中显示韩语,韩文
  10. python装饰器讲解_Python装饰器讲解的不能再通俗易懂了(建议收藏)
  11. VUE3+TS脚手架安装+目录文件规范
  12. mysql基础学习--day7
  13. TiDB-explain详解
  14. 跨境电商:我们快要死了!可能都撑不过一个月
  15. java实现根据高德地图API接口进行地址位置解析,将地址转化为经纬度
  16. 各种EDA软件的PCB文件后缀名
  17. WPS在引用中制作目录
  18. 几种 VR 的数据传输方案
  19. C++之string的compare用法
  20. qq邮件在腾讯官方服务器有备份吗,foxmail怎么备份和恢复邮件?

热门文章

  1. 数学建模【开会总结】
  2. 人大金仓数据库的备份与还原
  3. 比特率与波特率的定义及区别
  4. java贝塞尔函数插值_空间插值分析算法综述
  5. Matlab 绘制直方图、面积图、饼图、针状图
  6. PMP杂谈--配置管理系统和变更控制系统
  7. vb access mysql数据库教程_vb操作access数据库的方法
  8. WOODWARD伍德沃德控制器维修变送器维修MFR1
  9. 同步发电机励磁调节实验原理_发电机组自动控制系统工作原理
  10. 传说中的世界500强面试题-推理能力(2)