当前位置:   article > 正文

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

duilib github

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
//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);
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
//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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
//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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
<?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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

7)编译,检查是否编译成功
在这里插入图片描述
8)若编译成功,此时运行会提示找不到Duilib_ud.dll文件
在这里插入图片描述
9)将编译好的Duilib源码中的bin目录中的Duilib_ud.dll拷贝至当前项目的Debug文件夹,和exe文件放在一起
在这里插入图片描述
10)此时再运行,就能够成功运行了
在这里插入图片描述点击中间红色按钮即可关闭程序。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/942820
推荐阅读
相关标签
  

闽ICP备14008679号