2021 Duilib最新入门教程(一)Duilib简介
比起介绍“Duilib是什么?”,更重要的应该是了解“Duilib解决什么问题?”
Duilib解决什么问题?
先聊聊一个话题:怎样做一个有界面的软件?
方案一、自己画界面
最原始的办法是自己绘制界面的所有点线面。
操作系统提供了绘制的接口(Windows API):GDI。
GDI(Graphics Device Interface图形设备接口)提供以下功能:
绘制一个像素点:SetPixel()。
绘制直线:MoveTo(),LineTo()。
绘制多个首尾相连的线:Polyline()。
绘制矩形:FrameRect(),Rectangle()。
优点是可以自由设计界面长什么样,缺点就是太麻烦了,要控制所有细节。
方案二、使用标准控件
Windows对GDI进行进一步封装,提供了多种标准控件,比如:按钮、编辑框这些。
优点是写界面只是把多个控件组合起来,缺点这些控件是固定的,比较难调整。
方案三、使用Duilib框架
使用GDI:灵活但不方便;
使用标准控件:方便但不灵活;
想要灵活又方便,就需要结合两者的优势。
Duilib也对GDI进行了封装,提供基本的控件(按钮、编辑框等),方便使用。
但和Windows的标准控件不一样,Duilib提供的控件有多个参数可以灵活调整。
综上所述,Duilib要解决的问题就是:怎样方便又灵活地编写一个小而美的界面软件?
Duilib是什么?
先看下Duilib官方简介
Duilib是一个Windows下免费开源的DirectUI界面库,由于简约易扩展的设计以及稳定高效的实现被各大互联网公司普遍接受,广泛应用于包括IM、视频客户端、股票行情软件、导航软件、手机辅助软件、安全软件等多个行业的众多pc客户端软件。Duilib还在不断的发展中,在文档、例子、动画、渲染引擎等多个方面将持续改进。
再看下DirectUI 百度百科
DirectUI意为直接在父窗口上绘图(Paint on parent dc directly)。即子窗口不以窗口句柄 的形式创建(windowless),只是逻辑上的窗口,绘制在父窗口之上。
简单来说,Duilib是一个自绘控件的界面库,使用Duilib可以开发小而美的界面软件。
用Duilib写一个界面软件,只需要用一个xml文件描述界面长什么样,然后在代码中写上操作界面之后怎么处理就可以了。这里摘取一下关键的代码:
// 界面上显示一个按钮 按钮名字为btn
<Button name="btn" text="按钮" />
// 点击按钮对应的处理函数
if (msg.sType == _T("click")) // 判断是不是点击事件
{
if (msg.pSender->GetName() == _T("btn"));// 判断是不是 btn 按钮
{
::MessageBox(NULL, _T("我是按钮"), _T("点击了按钮"), NULL);
}
}
Duilib技术交流群:799142530
2021 Duilib最新入门教程(一)Duilib简介的更多相关文章
- RabbitMQ入门教程(二):简介和基本概念
原文:RabbitMQ入门教程(二):简介和基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...
- CentOS7 下Docker最新入门教程 超级详细 (安装以及简单的使用)
转载https://blog.csdn.net/wzsy_ll/article/details/82866627 1.为什么使用Docker(本人) 最近总是频繁的在新服务器发布项目, 每次发布都需要 ...
- Kali 2021.2 最新安装教程 图文详解(保姆式)
0x00 前言 Kali Linux 新版本(2021.2)增加大量新工具和功能,感兴趣的小伙伴可以到kali官网查看相关介绍. 新版采用Xfce 4.16桌面环境,附上帅照! 0x01 安装环境 宿 ...
- 转载:TypeScript 简介与《TypeScript 中文入门教程》
简介 TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.安德斯·海尔斯伯格,C#的首席架构 ...
- WCF入门教程(一)简介
WCF入门教程(一)简介 1.WCF是什么? WCF( Windows Communication Foundation), 是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NE ...
- GBDT(MART) 迭代决策树入门教程 | 简介
GBDT(MART) 迭代决策树入门教程 | 简介 http://blog.csdn.net/w28971023/article/details/8240756
- Caliburn.Micro 杰的入门教程6, Screens 和 Conductors 简介
Caliburn.Micro 杰的入门教程1(翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译)Caliburn.Micro 杰的入门教程3, ...
- .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二)
原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 先上项目解决方案图: 以上可以看出项目结构可以划分为4大块,1是surging的核心底层,2,3,4都可以 ...
- ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区 1 Desktop简介 1.1 ArcGIS for Desktop ...
随机推荐
- [日常摸鱼]Luogu2878 [USACO07JAN]Protecting the Flowers
直接贴题面x 有$n$头奶牛跑到FJ的花园里去吃花儿了,它们分别在距离牛圈$T$分钟处吃花儿,每分钟会吃掉$D$朵卡哇伊的花儿,FJ现在要将它们给弄回牛圈,但是他每次只能弄一头回去,来回用时总共为$2 ...
- python之把列表当做队列使用
把列表当做队列使用,只是在列表中第一个加入的元素,第一个提取出来,拿列表当做队列用,效率并不高.在列表中最后添加或者删除元素速度很快,然而从列表里插入或者从头弹出速度却不快,因为其他所有元素都要一个一 ...
- 分布式事务MSDTC使用时,需要的配置
服务器最终配置 DTC服务 组件 防火墙 这里,跟下面的解决方案有点差异,在添加2个规则之后,原本就有分布式相关的规则,也给开启了. 网上的解决办法 在服务里打开 Distributed Transa ...
- C#中烦人的Null值判断竟然这样就被消灭了
作者:依乐祝 首发自:DotNetCore实战 公众号 https://www.cnblogs.com/yilezhu/p/14177595.html Null值检查应该算是开发中最常见且烦人的工作了 ...
- mybatis实现MySQL数据库的增删改查
环境: jdk1.8 mysql5.7 maven3.6.0 IDEA 什么是mybatis框架? MyBatis 是一款优秀的持久层框架, 它支持自定义 SQL.存储过程以及高级映射. MyBati ...
- Flash Player的终章——赠予它的挽歌
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 12月28日消息,微软已经确认Windows 10在下一次更新时将自动删除F ...
- javap使用
在反编译前你当然需要先编译这个类了进入当前目录下:javac -g SynchronizedTest.java(使用-g参数是因为要得到下面javap -l时的输出需要使用此选项) 编译完成后,我们在 ...
- String--常见面试题
String s = new String("xyz") 创建了几个对象? 实例分析1 javac编译代码,然后用javap来反编译,执行javap -c Test 从结果来看,l ...
- NP问题/NP完全问题(NP-complete problem)如何判断是否是NP完全问题
在算法复杂度分析的过程中,人们常常用特定的函数来描述目标算法,随着变量n的增长,时间或者空间消耗的增长曲线,近而进一步分析算法的可行性(有效性). 引入了Big-O,Big-Ω,来描述目标算法的上限. ...
- 手把手教你用C语言编写一个哈希表
原文链接:https://www.swack.cn/wiki/001558681974020669b912b0c994e7090649ac4846e80b2000/001572849111298ae3 ...