Duilib_CEF桌面软件实战之Duilib编译与第一个界面程序

Duilib介绍

Duilib是windows平台下的一款轻量级directUI开源库(遵循BSD协议),完全免费,可用于商业软件开发,只需在软件包里附上协议文件即可。Duilib可以简单方便地实现大多数界面需求,包括换肤、换色,透明等功能,支持多种图片格式,使用XML可以方便地定制窗口,能较好地做到UI和逻辑相分离,尽量减少在代码里创建UI控件。目前官方Duilib已经停止维护了,但还是有很多旁系分支在努力维护者,咱们使用的是Troy 大佬维护的版本:下载地址

Duilib编译

因为CEF是用VS2022编译的,所以Duilb也需要这个版本的编译器编译(DLL需要编译成MTD)

Duilib调用

首先创建一个新的windows桌面应用程序:

取好项目名,因为我们需要把duilib的头文件添加到项目里面,为了方便我们直接把duilib整个项目都拷贝到新项目的文件夹中。

然后右键解决方案,添加-->现有项目-->选择解决方案路径-->DuiLib.vcxproj

然后在生产的项目把duilib头文件Include进去,比如我在framework.h这个文件中,你也可以在自己项目的预编译头文件写。

然后把项目入口文件除了main函数其余的都删除掉。我们不需要微软自己创建得窗口。

好了,准备工作都做好了,开始添加主界面类吧。

名字自取哦。我添加的名字:CFrameWnd.h与CFrameWnd.cpp(以后所有讲解我就直接以我创建的文件名命名了)。

在CFrameWnd.h头文件中CFrameWnd继承duilib中的WindowImplBase类。

cpp 复制代码
#include"framework.h"
class CFrameWnd :  public WindowImplBase
{
	
public:
	explicit CFrameWnd(LPCTSTR pszXMLPath) : strXMLPath(pszXMLPath) {

	};
	explicit CFrameWnd() {};
	~CFrameWnd() {};
	virtual LPCTSTR		GetWindowClassName() const { return _T("QingFengFrame"); }
	virtual CDuiString	GetSkinFile() { return strXMLPath; }
	virtual CDuiString	GetSkinFolder() { return _T(""); }
	void InitWindow();
private:
	CDuiString strXMLPath;
};

GetWindowClassName:是设置窗口类名

GetSkinFile:就是xml路径名

GetSkinFolder:需要返回 皮肤XML 所在的文件夹

InitWindow:是我们自己写的函数,目前是空函数。

然后在main函数写入我们需要创建的窗口代码:

cpp 复制代码
#include "framework.h"
#include "duilib_cef.h"
#include"CFrameWnd.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::SetResourcePath(CPaintManagerUI::GetInstancePath() + _T("skin"));
   
    CFrameWnd duiFrame(L"frame.xml");
    duiFrame.Create(NULL, _T("FrameWnd"), UI_WNDSTYLE_DIALOG | WS_MINIMIZEBOX, WS_EX_WINDOWEDGE);
    duiFrame.ShowModal();
}

SetInstance:初始化

SetResourcePath:设置资源路径(xml与图片地址)

Create:和win32创建窗口差不多,其实它里面就是封装了那几个系统函数

ShowModal:创建模态对话框。

最后一步就是要创建frame.xml文件了,这是最基本的xml代码,创建800*600以天蓝色为背景的窗口。记得保存到skin文件夹中。

好了,万事具备,就差编译执行了,试试效果吧。

我们第一个duilib界面已经完成了。喜欢这系列的朋友点拨关注收藏吧

相关推荐
单片机设计·······18 分钟前
【dz-1162】汽车前玻璃雨刮器设计
c++·单片机·嵌入式硬件
小刘在重生~33 分钟前
CSS 零基础完整学习笔记|选择器|盒子模型|布局
css·笔记·学习
AI智讯中枢37 分钟前
高性能 C++ 实战 (五):perf+FlameGraph 火焰图生产实战,精准定位 CPU / 缓存 / 锁瓶颈,避坑 + 完整实操案例
linux·c++·性能调优·性能分析·perf·flamegraph·火焰图
繁华的地方不一定留下你的脚印42 分钟前
C++ 算法与 ranges:用 find_if、transform 写清数据处理意图
开发语言·c++·算法
张小姐的猫44 分钟前
【AI大模型接入SDK】 —— 前端页面 & 项目总结与拓展
前端·数据结构·数据库·c++·人工智能·chatgpt
浩瀚地学1 小时前
deepagents学习打卡day07
经验分享·笔记·python·学习·agent
泰晶科技1 小时前
【智能手表晶振选型:小尺寸与低功耗如何兼得】
人工智能·笔记
Awh-1 小时前
ARM 裸机开发 DAY5 学习笔记
arm开发·笔记·学习
AC赳赳老秦1 小时前
财报附注表格精准提取:OpenClaw 从 PDF 年报附注挖掘隐藏明细,补齐财务分析维度
java·汇编·c++·python·青少年编程·deepseek·openclaw
欧特克_Glodon1 小时前
OpenCV计算机视觉开发入门与实践(基于C++):专栏内容介绍及目录
c++·人工智能·opencv·计算机视觉