1、DuiLib的编译和运行

该文章详细介绍了如何编译和运行原生、网易和腾讯版本的DuiLib,包括生成.dll动态库和.lib静态库的步骤,并展示了在win32项目中使用DuiLib的配置和示例代码,强调了动态库和静态库的使用区别及注意事项。
摘要由CSDN通过智能技术生成

1、原生DuiLib的编译和运行

原生DuiLib地址:DuiLib地址

在这里插入图片描述

1.1、下载并解压成这个样子

在这里插入图片描述

1.2、打开.sln解决方案文件

在这里插入图片描述

原生DuiLib默认是多字节多字符集、以及默认生成 .dll 动态库。

1.3、编译成功

在这里插入图片描述

bin目录下,生成了各种**.exe可执行文件以及.dll**动态库:

在这里插入图片描述

2、网易DuiLib编译和运行

github地址:网易DuiLib

在这里插入图片描述

2.1、下载并解压成这个样子

在这里插入图片描述

2.2、打开.sln解决方案文件

在这里插入图片描述

2.3、编译成功

在这里插入图片描述

bin目录下,生成了各种 .exe 可执行文件以及在libs目录下 .lib 静态库:
在这里插入图片描述

在这里插入图片描述

3、腾讯DuiLib编译和运行vs 2017

3.1、下载并解压成这个样子

在这里插入图片描述

3.2、打开.sln解决方案文件

3.3、编译成功

4、原生DuiLib的.lib和.dll静态库和动态库

4.1、使用DuiLib先生成.dll动态库

生成目录:
在这里插入图片描述

在这里插入图片描述

4.2、使用DuiLib生成静态库

生成目录:
在这里插入图片描述

在这里插入图片描述

4.3、编写一个win32项目

4.3.1、新建项目

在这里插入图片描述

出来这个界面:
在这里插入图片描述

在这里插入图片描述

4.3.2、配置项目

多字节多字符集:

在这里插入图片描述

配置头文件目录:

在这里插入图片描述
在这里插入图片描述

配置库目录:

在这里插入图片描述

在这里插入图片描述

4.3.3、包含头文件以及使用DuiLib命令空间

在这里插入图片描述

编译没有问题就说明配置DuiLiB包含成功:

在这里插入图片描述

4.3.4、编写入门简单程序使用.dll动态库
// new_test_demo.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "new_test_demo.h"

#include"UIlib.h"
using namespace DuiLib;

class CFrameWindowWnd : public CWindowWnd, public INotifyUI
{
public:
	CFrameWindowWnd() { };
	LPCTSTR GetWindowClassName() const { return _T("UIMainFrame"); };
	UINT GetClassStyle() const { return UI_CLASSSTYLE_FRAME | CS_DBLCLKS; };
	void OnFinalMessage(HWND /*hWnd*/) { delete this; };

	void Notify(TNotifyUI& msg)
	{
		if (msg.sType == _T("click")) {
			if (msg.pSender->GetName() == _T("closebtn")) {
				Close();
			}
		}
	}

	LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
	{
		if (uMsg == WM_CREATE) {
			m_pm.Init(m_hWnd);
			CControlUI *pButton = new CButtonUI;
			pButton->SetName(_T("closebtn"));
			pButton->SetBkColor(0xFFFF0000);
			m_pm.AttachDialog(pButton);
			m_pm.AddNotifier(this);
			return 0;
		}
		else if (uMsg == WM_DESTROY) {
			::PostQuitMessage(0);
		}
		LRESULT lRes = 0;
		if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes)) return lRes;
		return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
	}

public:
	CPaintManagerUI m_pm;
};

// 程序入口及Duilib初始化部分
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow)
{
	CPaintManagerUI::SetInstance(hInstance);
	CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());

	CFrameWindowWnd* pFrame = new CFrameWindowWnd();
	if (pFrame == NULL) return 0;
	pFrame->Create(NULL, _T("测试"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
	pFrame->ShowWindow(true);
	CPaintManagerUI::MessageLoop();

	return 0;
}

编译:

在这里插入图片描述

运行的时候会报错,缺少 .dll 动态库:

在这里插入图片描述

只需要把**.dll动态库放到和.exe**同级目录即可。
在这里插入图片描述

再次运行成功:
在这里插入图片描述

4.3.5、编写入门简单程序使用.lib动态库

4.3.5.1、生成lib静态库,正确编译 Duilib 静态库的方法
4.3.5.1.1、添加官方 DuiLib_Static 项目

在官方的代码中有一个 DuiLib_Static.vcxproj 的工程文件,这就是 DuiLib 的静态库编译的工程。

在这里插入图片描述

**(这里已经修改过的)**但是细心的人可能发现了,仅有一个 .vcproj 的项目文件,没有 .filters 的文件目录树描述文件。没关系,我们直接复制一份 Duilib.vcxproj.filters 文件改名为 Duilib_Static.vcxproj.filters 即可,这个文件只是描述在 vs 中看到的文件目录结构,静态库和动态库都使用一样的目录树即可。修改完成后是下面这幅图的样子:
在这里插入图片描述

我们增加了 Duilib_Static.vcxproj.filters 的文件,此时我们把这个工程添加到 duilib 的解决方案中。然后打开DuiLib_Static.vcxproj编译:

在这里插入图片描述

这样就生成了DuiLib_d.lib静态库。

在这里插入图片描述

4.3.5.2、在项目预处理器中添加UILIB_STATIC

在这里插入图片描述

4.3.5.3、添加DuiLib_d.lib静态库

在这里插入图片描述

在这里插入图片描述

4.3.5.4、再次编译出现如下问题

在这里插入图片描述

修改C++运行库为多线程调试:
在这里插入图片描述

在这里插入图片描述

再次编译:

在这里插入图片描述

4.3.5.5、放在任意目录下都可以运行

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1.duilib简介 duilib是一个开源的DirectUI界面库,简洁但是功能强大。而且还是BSD的license,所以即便是在商业上,大家也可以安心使用。 现在大家可以从这个网站获取到他们所有的源码:/p/duilib/ 为了让我们能更简单的了解其机制,我们按照如下顺序一步一步的来对他进行观察: 工具库:用于支撑整个项目的基础 控件库:这是dui最关键的部分之一,相信也是大家最关注的部分之一,另外这里也来看看它是如何管理这些控件的 消息流转:有了控件库,我们需要将Windows窗口的原生消息流转给这些控件,另外在这里也来看看Focus,Capture等等的实现 资源组织和皮肤加载:有了上面所有的这些,我们再来看看它是如何自动创建皮肤的 简单使用:最后,来看看到底要如何使用它 以下是duilib工程带的一副总体设计图,在看代码之前看看这幅图,对看代码会很有帮助。 duilib: 2.工具库 由于duilib没有对外部的任何库进行依赖,所以在其内部实现了很多用于支撑项目的基础类,这些类分布在Util文件夹中: UI相关:CPoint/CSize/CDuiRect 简单容器:CStdPtrArray/CStdValArray/CStdString/CStdStringPtrMap 上面这些类看名字就基本能够理解其具体的含义了,当然除了基本的基础库,还有一些和窗口使用相关的工具的封装: 窗口工具:WindowImplBase,这个工具我们在这里不详述,后面会再次提到。 3.控件库 控件库在duilib的实现中被分为了两块:Core和Control: Core中包含的是所有控件公用的部分,里面主要是一些基类和绘制的封装。 Control中包含的就是各个不同的控件的行为了。 Core部分和控件相关的类图非常简单: duilib-core: 3.1.控件基类:CControlUI CControlUI在整个控件体系中非常重要,它是所有控件的基类,也是组成控件树的基本元素,控件树中所有的节点都是一个CControlUI。 他基本包括了所有控件公共的属性,如:位置,大小,颜色,是否有焦点,是否被启用,等等等等。当然这个类中还提供了非常多的基础函数,用于重载来实现子控件,如获取控件名称和ClassName,是否显示,等等等等。 另外为了方便从XML中直接解析出控件的各个属性,这个类中还在提供了一个SetAttribute的方法,传入字符串的属性名称和值对特定的属性进行设置,内部其实就是挨个比较字符串去完成的,所以平时使用的时候就还是不要使用的...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森明帮大于黑虎帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值