比起介绍“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简介的更多相关文章

  1. RabbitMQ入门教程(二):简介和基本概念

    原文:RabbitMQ入门教程(二):简介和基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...

  2. CentOS7 下Docker最新入门教程 超级详细 (安装以及简单的使用)

    转载https://blog.csdn.net/wzsy_ll/article/details/82866627 1.为什么使用Docker(本人) 最近总是频繁的在新服务器发布项目, 每次发布都需要 ...

  3. Kali 2021.2 最新安装教程 图文详解(保姆式)

    0x00 前言 Kali Linux 新版本(2021.2)增加大量新工具和功能,感兴趣的小伙伴可以到kali官网查看相关介绍. 新版采用Xfce 4.16桌面环境,附上帅照! 0x01 安装环境 宿 ...

  4. 转载:TypeScript 简介与《TypeScript 中文入门教程》

    简介 TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.安德斯·海尔斯伯格,C#的首席架构 ...

  5. WCF入门教程(一)简介

    WCF入门教程(一)简介 1.WCF是什么? WCF( Windows Communication Foundation), 是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NE ...

  6. GBDT(MART) 迭代决策树入门教程 | 简介

    GBDT(MART) 迭代决策树入门教程 | 简介  http://blog.csdn.net/w28971023/article/details/8240756

  7. Caliburn.Micro 杰的入门教程6, Screens 和 Conductors 简介

    Caliburn.Micro 杰的入门教程1(翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译)Caliburn.Micro 杰的入门教程3, ...

  8. .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二)

    原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 先上项目解决方案图: 以上可以看出项目结构可以划分为4大块,1是surging的核心底层,2,3,4都可以 ...

  9. ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区 1 Desktop简介 1.1 ArcGIS for Desktop ...

随机推荐

  1. [日常摸鱼]poj2420 A Star not a Tree?

    题意:给定$n$个点,找一个点使得这个点到所有点的距离之和最小,求出这个最小距离 传说中的模拟退火- #include<cstdio> #include<ctime> #inc ...

  2. spring mvc与mybatis与maven+mysql框架整合

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  3. [Machine Learning] 逻辑回归 (Logistic Regression) -分类问题-逻辑回归-正则化

    在之前的问题讨论中,研究的都是连续值,即y的输出是一个连续的值.但是在分类问题中,要预测的值是离散的值,就是预测的结果是否属于某一个类.例如:判断一封电子邮件是否是垃圾邮件:判断一次金融交易是否是欺诈 ...

  4. 配置 nginx 访问资源目录,nginx配置 root 与 alias 的区别

    比如说想要把 /home/source 目录作为资源目录,那么需要如下配置: location /source/ { #识别url路径后,nginx会到/home/文件路径下,去匹配/source r ...

  5. MongoDb二

    获取集合的时候,可以传入bean的class文件.来实现数据的绑定.在这之前.需要自定义一个Codec类.进行数据的转换. MongoClient client=new MongoClient(new ...

  6. JavaDailyReports10_18

    学习内容:HTML基本知识 1.通常标记具有默认属性,当一个标记中只有标记名时,使用默认属性. 2.HTML标记有两种:单标记和双标记,单标记的语法格式:  <标记名称/> 3.不同的属性 ...

  7. 每日一个linux命令6 -- mv

    mv test.log test1.txt 文件改名 mv test1.log test3 文件移动 mv test1.log test2.log test3.log test4 将1,2,3.log ...

  8. 四、hive安装

    一.安装方式(内嵌模式,本地模式远程模式) 安装环境以及前提说明: Hive是依赖于hadoop系统的,因此在运行Hive之前需要保证已经搭建好hadoop集群环境. 本例中使用的hadoop版本为2 ...

  9. 杭电OJ----1097:一个难题(c++)

    问题描述 lcy给feng5166,lwg,JGShining和Ignatius带来了一个难题:给了a和b,如何知道a ^ b.每个人都反对这个BT问题,所以lcy使问题比开始容易. 这个难题描述了: ...

  10. 第1章 什么是JavaScript

    目录 1. JavaScript实现 1.1 ECMAScript 1.2 DOM 1.3 BOM 1995年JavaScript问世时主要用途时代替Perl等服务器段语言处理输入验证 1. Java ...