使用Duilib开发Windows软件(1)——HelloWorld
我使用的是网易版本: https://github.com/netease-im/NIM_Duilib_Framework
时间是2019-11-28,作者最新的提交如下图:
运行官方示例程序
下载完成后进入如下目录双击打开工程:
打开后的工程(我使用的是VS2019社区版):
目前我只关心base和duilib两个工程,右键工程,属性,修改下图两个地方成本机环境:
这是我改完之后的样子:
然后右键,rebuild,base和duilib都执行rebuild,如果不出意外就能编译成功:
然后我们再去examples文件夹下把basic工程修改下:
右键编译basic工程:
不出意外也是会编译成功的,编译成功把basic设置为启动项目:
然后点击启动软件:
创建新项目
添加Windows Desktop Application新工程:
新建工程如下:
设置新建的工程为启动项目,直接运行下:
实际上作者有新建项目的教程,但是比较老了,有些东西不适用(比如当前版本就没有shared这个工程),下面是我的步骤:
作者教程 https://github.com/feipeng8848/NIM_Duilib_Framework/blob/master/docs/GETTING-STARTED.md
删除wWinMain函数所在文件的绝大多数内容只留下如下代码:
#include "framework.h"
#include "feipeng8848.h"
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
return 0;
}
设置输出目录
首先在工程目录下新建个文件夹Bin和Tmp分别作为程序输出目录和中间目录:
项目属性->常规(此处目录配置有误,不再重新截图了,后面有修正):
添加包含目录
把上面我们已经能够成功编译通过的base和duilib两个工程拷贝下(build文件夹也拷贝过来):
去我们新建的解决方案目录下新建个文件夹ToolKits:
把刚刚复制的三个文件夹粘贴到ToolKits文件夹里:
去VS中添加现有项目,把base和duilib两个项目添加进来:
新建个Libs目录,让base和duilib编译后输出到Libs,修改这两个项目的输出目录到Libs和Tmp中:
编译这两个项目得到lib文件:
然后去把这两个项目包好到我们的feipeng8848项目中,项目属性->VC++ 目录->包含目录中
项目属性->C/C++->代码生成,将 Debug 模式的运行库修改为 /MTd,将 Release 模式的运行库修改为 /MT,注意区分debug和release:
项目右键->添加->引用,将 base、duilib 作为引用项目,这样就不需要手动引入静态库文件了:
引入头文件
新建个stdafx.h文件,然后添加
// base header
#include "base/base.h"
// duilib
#include "duilib/UIlib.h"
引入线程库
在创建的项目中 wWinMain 所属的头文件中,增加自定义的主线程对象
在 wWinMain 的下面增加主线程对象的方法实现,在这里初始化 duilib
在 wWinMain 实例化主线程对象,并调用执行主线程循环,添加后 wWinMain 函数修改如下:
创建一个简单窗口
去作者的工程bin目录下把resources文件夹拷贝到我们的Bin目录下:
这个文件夹下有作者创建好的窗体,暂时不做详解。
然后去把作者的basic目录中下图两个文件拷贝到我们的工程目录中:
然后在VS中添加现有文件到工程中:
显示窗口
在主线程的 Init 方法中,创建窗口并居中显示,创建窗口前先引入窗口的头文件,修改后的代码如下:
注意此时有很多标红的错误,是因为没有引入头文件(注意两个头文件要在feipeng8848.h之前),下图是添加后的:
或者你直接把头文件的引入放到feipeng8848.h头文件中,更好一点:
然后编译项目就可以了,但是我出现了错误,原因是刚才修改的项目输出目录不对,修改之后的样子如下:
然后再执行编译就可以了:
我的示例工程下载链接:
https://github.com/feipeng8848/NIM_Duilib_Framework/blob/master/feipeng8848.zip
问题
VS2019无法编译ui_components工程,也无法编译所有引用ui_components的工程,详情见 https://github.com/netease-im/NIM_Duilib_Framework/issues/124 我试过用vs2017是可以编译所有的工程的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现