duilib环境配置以及简单入门介绍

内容全部为转载:
VS2013的编译,https://www.cnblogs.com/Alberl/p/3342030.html
duilib框架介绍,以及VS2013配置,创建工程,调试代码部分:
https://blog.csdn.net/lanuage/article/details/52040306
https://blog.csdn.net/GG_SiMiDa/article/details/70792890
具体为:

  1. 下载duilib-master;
  2. 解压后用VS编译器编译一遍,编译部分参考第一个网址;
  3. 配置VS环境, 调试代码,参考第二个网址和第三个网址;

环境配置为:

在这里插入图片描述
在环境变量的Path变量中添加对应的dll路径,这样就不需要将dll文件拷贝到自己项目的exe文件所在位置处。
在这里插入图片描述

创建工程,测试代码

我这里为,创建了一个win32工程,选择空项目,添加.cpp文件,文件内容为:

#include <DuiLib\UIlib.h>
using namespace DuiLib;#ifdef _DEBUG
#   ifdef _UNICODE
#       pragma comment(lib, "Duilib_ud.lib")
#   else
#       pragma comment(lib, "Duilib_d.lib")
#   endif
#else
#   ifdef _UNICODE
#       pragma comment(lib, "Duilib_u.lib")
#   else
#       pragma comment(lib, "Duilib.lib")
#   endif
#endifclass CFrameWnd : public CWindowWnd
{
public:virtual LPCTSTR GetWindowClassName() const{return _T("FrameWnd");}virtual void OnFinalMessage(HWND hWnd){delete this;}
};int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nShowCmd){// new一个窗口对象CFrameWnd* pFrame = new CFrameWnd;// 注册窗口类、创建窗口pFrame->Create(NULL, _T("sample01"), UI_WNDSTYLE_FRAME, UI_WNDSTYLE_EX_FRAME,100, 100, 800, 600, NULL);// 显示窗口、进入窗口消息循环pFrame->ShowModal();return 0;
}

显示效果为:
在这里插入图片描述

duilib简介:

国内首个开源 的directui 界面库,它提供了一个所见即所得的开发工具——UIDesigner,它只有主框架窗口,其余的空间全部采用绘制的方式实现,所以对于控件来说没有句柄和窗口类等内容,它通过UIDesigner工具将用户定义的窗口保存在xml文件中,在创建窗口时读取xml文件中的内容,来绘制相应的控件。目前有许多界面采用duilib编写,大家可以去网上搜集相关资料。

窗口显示前的最后一个函数为:

CWindowWnd::Create(HWND hwndParent, LPCTSTR pstrName, DWORD dwStyle, DWORD dwExStyle, int x, int y, int cx, int cy, HMENU hMenu)
{if( GetSuperClassName() != NULL && !RegisterSuperclass() ) return NULL;if( GetSuperClassName() == NULL && !RegisterWindowClass() ) return NULL;m_hWnd = ::CreateWindowEx(dwExStyle, GetWindowClassName(), pstrName, dwStyle, x, y, cx, cy, hwndParent, hMenu, CPaintManagerUI::GetInstance(), this);ASSERT(m_hWnd!=NULL);return m_hWnd;
}
//::CreateWindowEx(...)为win32 API函数,该函数运行完即显示窗口,

总结

duilib的基本框架,下面来总结一下:

  1. CPaintManagerUI::SetInstance(hInstance);设置进程的实例句柄,这个值会在注册窗口类时使用
  2. 在CWindowWnd类中由Create函数完成窗口类的创建于注册,以及窗口的创建工作
  3. CWindowWnd类中的ShowWindow函数用于显示窗口
  4. 消息循环由CPaintManagerUI::MessageLoop();代码完成
  5. 最后需要重写MessageHandle函数用于处理我们感兴趣的消息。并且在最后需要调用基类的MessageHandle函数,主要是为了调用DefWindowProc处理我们不感兴趣的消息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android开发之Java集合类性能分析

对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的&#xff0c;目前主要提供了List、Set和 Map这三大类的集合&#xff0c;今天就他们的子类在标准情况和多线程下的性能做简单的分析。 Collection接口主要有两种子类分别为List和Set&am…

2019年汽车行业深度投资研究

来源&#xff1a;中泰证券2018年预计我国汽车销售负增长&#xff0c;为30年来首次&#xff0c;批发数据自5月份开始逐步下降&#xff0c;尤其是9月之后,销售增速加速下滑,判断汽车市场弱势的原因和持续时间长短&#xff0c;是思考2019年汽车行业投资策略的前提。我们认为&#…

duilib消息事件产生和分发解释

参考博客&#xff1a;https://www.cnblogs.com/haomiao/p/5055413.html

有没有哪些数学猜想是验证到很大的数以后才发现是错的?

来源&#xff1a;孙天任算数学苑素数的分布密度为 ρ(x)~1/ln(x)&#xff0c;从而在 x 以内的素数个数——通常用 π(x) 表示——为&#xff1a; π(x) ~ Li(x) 其中 Li(x) ≡ ∫ 1/ln(x) dx 是对数积分函数 。这个结果有些读者可能也认出来了&#xff0c;它正是著名的素数定理…

JAVA动态代理(JDK和CGLIB)

JAVA的动态代理 代理模式 代理模式是常用的java设计模式&#xff0c;他的特征是代理类与委托类有同样的接口&#xff0c;代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类&#xff0c;以及事后处理消息等。代理类与委托类之间通常会存在关联关系&#xff0c;一…

duilib消息机制的介绍

参考&#xff1a;https://www.cnblogs.com/redrainblog/p/4209721.html

徐铁:当深度学习握手脑科学-圣城会议归来

原创&#xff1a;许铁 来源&#xff1a;混沌巡洋舰耶路撒冷号称三教圣地&#xff0c; 而它的牛逼之处绝不仅在于宗教&#xff0c; 如果你深入了解&#xff0c; 你会发现它的科学&#xff0c;尤其是理论创新也同样牛逼&#xff0c; 尤其是在脑科学和人工智能方向。 当然神族…

hdu 1241Oil Deposits(BFS)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1241 Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 13137 Accepted Submission(s): 7611 Problem DescriptionThe GeoSurvComp…

重磅!联合国权威AI趋势报告,美中日韩四分天下

来源&#xff1a;智东西摘要&#xff1a;AI趋势报告&#xff0c;中美专利申请和科学出版数遥遥领先。近年来&#xff0c;随着AI从理论知识落地到全球市场&#xff0c;AI正以其潜在的革命性影响&#xff0c;持续推动技术和产业的重大变革&#xff0c;从天气预报、自动驾驶、癌症…

模态窗口和非模态窗口

转载自&#xff1a;https://my.oschina.net/u/2425942/blog/882879 模态窗口就是在该窗口关闭之前&#xff0c;其父窗口不可能成为活动窗口的那种窗口。 例如&#xff1a; 窗口A弹出窗口B,如果窗口B是模态的&#xff0c;在窗口B关闭前就不可能切换到窗口A;如果B是非模态的&…

cut命令详解(转)

线上会log回归&#xff0c;计算请求超时率&#xff0c;会用到cut命令&#xff0c;看了一篇不错的文章&#xff0c;转了。。 1 描述一下cut命令 正如其名&#xff0c;cut的工作就是“剪”&#xff0c;具体的说就是在文件中负责剪切数据用的。 cut是以每一行为一个处理对象的&…

通信产业5G迭代,万亿机遇一触即发

来源&#xff1a;中银国际摘要&#xff1a;进入本世纪一零年代后&#xff0c;全球通信行业首先迎来了4G商用的元年。▌通信产业5G迭代促使中国企业突破进入本世纪一零年代后&#xff0c;全球通信行业首先迎来了4G商用的元年。LTE网络在世界各地开花&#xff0c;“管”领域的性能…

duilib中的添加自定义控件

原理参考博客&#xff1a;https://blog.csdn.net/zhuhongshu/article/details/45362751#commentBox 添加自定义的控件时&#xff0c;让程序识别该控件&#xff0c;要继承IDialogBuilderCallback接口&#xff0c;并实现接口中的CreateControl函数&#xff0c;自定义控件主要是继…

duilib中界面的布局方式

参考博客&#xff1a;https://blog.csdn.net/zhuhongshu/article/details/38531447 常用的布局默认为相对布局&#xff0c;默认floatfalse&#xff0c;该属性为true时&#xff0c;表示绝对布局&#xff1b; 相对布局方式可以依据界面自动调整控件大小。 最常用的VerticalLayout…

『重构--改善既有代码的设计』读书笔记----Split Temporary Variable

继续开始我们重构手法的系列&#xff0c;今天介绍的是Split Temporary Variable---分解临时变量。 在我们平常写的程序中肯定有某些临时变量被赋予了超过一个的责任。如果他们不是那种收集结果&#xff08;temp temp QString("abc")&#xff09;或者循环变量&#…

美丽新世界:这七个原因将让未来更美好

来源&#xff1a;资本实验室摘要&#xff1a;技术进步推动人类社会的进步。然而在现实生活中&#xff0c;对技术的恐惧困扰着相当一部分人。暴走的机器人、失控的AI、滥用的人体增强……这些经常出现于各种反乌托邦科幻故事中的场景也被认为是对技术破坏的一种警示。如果能够从…

学习OpenStack之 (4): Linux 磁盘、分区、挂载、逻辑卷管理 (Logical Volume Manager)

0. 背景&#xff1a; inux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小&#xff0c;以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小&#xff0c;当一个逻辑分区存放不下某个文件时&#xff0c;这个…

写论文文献引用方式

打开百度学术&#xff1a; 如下&#xff1a;

美国DARPA204页可解释人工智能文献综述论文《Explanation in Human-AI Systems》

来源&#xff1a;专知摘要&#xff1a;本文介绍Arxiv上的《Explanation in Human-AI Systems》&#xff0c;一篇关于可解释机器学习的综述&#xff0c;介绍了可解释机器学习的多学科观点、历史研究、模型、关键点等。可解释AI是现在正火热的科研和工程问题。Arxiv上一篇《Expla…

Thinkphp系统常量

预定义常量 常量说明URL_COMMON0普通模式 URLURL_PATHINFO1PATHINFO URLURL_REWRITE2REWRITE URLURL_COMPAT3兼容模式 URLHAS_ONE1HAS_ONE 关联定义BELONGS_TO2BELONGS_TO 关联定义HAS_MANY3HAS_MANY 关联定义MANY_TO_MANY4MANY_TO_MANY 关联定义THINK_VERSION框架版本号这些预…