我使用的是网易版本: 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 方法中,创建窗口并居中显示,创建窗口前先引入窗口的头文件,修改后的代码如下:



注意此时有很多标红的错误,是因为没有引入头文件,下图是添加后的:



然后编译项目就可以了,但是我出现了错误,原因是刚才修改的项目输出目录不对,修改之后的样子如下:



然后再执行编译就可以了:



我的示例工程下载链接:

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是可以编译所有的工程的。

使用Duilib开发Windows软件(1)——HelloWorld的更多相关文章

  1. 使用Duilib开发Windows软件(2)——控件的基本介绍

    XML 先学习xml https://www.w3cschool.cn/xml/xml-xml-tutorialhc4o1t5m.html 控件 上图是我们下载的NIM_Duilib_Framewor ...

  2. 使用Duilib开发Windows软件(5)——使用VLC做视频播放

    需求:调用PC上的摄像头拍照. 实现思路:接入视频流,截屏获取照片. 早期的vlc安装包(Windows)是附带sdk包的,现在的安装后已经没有了,原因如下: VLC SDK下载连接:https:// ...

  3. 使用Duilib开发Windows软件(4)——消息传递

    云信Duilib中没有窗体类的函数可以用来直接收取到所有控件的事件,每个控件都可以单独设置自己的事件处理函数,一般在InitWindow方法中初始化各个控件的事件处理函数. 每个控件都有许多形如Att ...

  4. 使用Duilib开发Windows软件(3)——控件的样式

    摘抄下 https://www.cnblogs.com/Alberl/p/3344936.html 的一段代码 <?xml version="1.0" encoding=&q ...

  5. 开发客户端软件时,出现System.Windows.Markup.XamlParseException错误

    开发客户端软件时,出现System.Windows.Markup.XamlParseException错误,通过查看错误消息,发现TCPIP的一个COM组件在安装软件过程中被删除了,重新注册了一下TC ...

  6. 网易云信Duilib开发实践和Windows应用界面开发框架源码开源介绍

    序言 Duilib介绍 Duilib是windows平台下的一款轻量级directUI开源库(遵循BSD协议),完全免费,可用于商业软件开发,只需在软件包里附上协议文件即可.Duilib可以简单方便地 ...

  7. 2014年最热门的国人开发开源软件TOP100

    2014年最热门的国人开发开源软件TOP100 不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多 ...

  8. Selenium2学习-001-Selenium2 WebUI自动化Java开发 Windows 环境配置

    此文主要介绍 Selenium2 WebUI自动化Java开发 Windows 环境配置,供各位亲们参考,若有不足之处,敬请各位大神指正,非常感谢! 所需软件列表如下所示: 所属分类 具体名称 备注 ...

  9. Manual | BSD手册| Linux手册 | 数据库手册 | 编程开发手册 | WEB开发手册 | 软件应用手册 | 网络技术手册 | GNU手册

    豆豆手册 □ BSD手册 □ Linux手册 □ 数据库手册 □ 编程开发手册 □ WEB开发手册 □ 软件应用手册 □ 网络技术手册 □ GNU手册 在线手册 首 页 BSD手册   ·FreeBS ...

随机推荐

  1. SpringCloud介绍及入门一

    springcloud是什么 基于spring boot实现的服务治理工具包,管理和协微服务 把别人的东西拿来组合在一起,形成各种组件 微服务协调者[service registtry注册中心 Eur ...

  2. Java枚举知识点

    近几天从单例模式及阿里开发手册中遇到枚举,之前没怎么关注过. 便学习一下,此次看了多方资料,并写Demo实现,记录下知识点,方便之后巩固. 枚举的两个优点: 1. 保证了类型安全:调用者无法随意传一个 ...

  3. 2018-2019-2 20165234 《网络对抗技术》 Exp8 网络欺诈防范 Web基础

    Exp8 网络欺诈防范 Web基础 一. 实践内容 1. Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. 2. Web ...

  4. 分布式文件上传 spring boot + fastdfs + dropzone

    1.首先安装fastDFS 参考链接: https://www.funtl.com/zh/spring-cloud-itoken-codeing/%E5%88%86%E5%B8%83%E5%BC%8F ...

  5. php手记之02-tp5请求参数读取三种方式

    01-[推荐方式] 当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息.在Thinkphp5.1中,获取请求对象数据,是由think\Request类负责,在很多场合下并不需 ...

  6. Cesium入门-1-展示一个地球

    Cesium 官网教程地址 https://cesium.com/docs/tutorials/getting-started//tutorials/getting-started/ 第一个程序代码: ...

  7. webpack介绍和使用

    一webpack介绍1由来2介绍3作用4拓展说明5webpack整体认知二webpack安装1安装node2安装cnpm3安装nrm的两种方法4安装webpack三webpack配置0搭建项目结构1初 ...

  8. GDPR全文翻译(二)

    第三节 数据保护影响评估以及事先咨询 第35条 数据保护影响评估 1.鉴于一种数据处理方式,尤其是使用新技术进行数据处理,统筹考虑处理过程的性质.范围.内容和目的,(不难得知)这很可能对自然人权利和自 ...

  9. python __iter__ 迭代器

    1. 迭代器是什么? 迭代器是一个对象,是python非常强大的特性 根本上说, 迭代器就是有一个 next() 方法的对象, 而不是通过索引来计数. 当你或是一个循环机制(例如 for 语句)需要下 ...

  10. 【转载】 迁移学习与fine-tuning有什么区别

    原文地址: https://www.cnblogs.com/fangpengchengbupter/p/8276204.html ----------------------------------- ...