![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
duilib 快速入门 (C++ 界面开发)
文章平均质量分 76
本专栏
以云信duilib为例,
了解duilib基础,注重实例演示
了解机制、配合实例,快则一天,慢则一周 即可入门
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
清水迎朝阳
多年windows下c++客户端开发,或多或少踩了很多坑,积累了一些经验
展开
-
duilib 窗口销毁 方式
一般情况下,所有的窗口都派生自WindowEx。原创 2024-08-15 11:41:55 · 12 阅读 · 0 评论 -
duilib 原理分析 之 Button的click 事件
button模版类的基类是label模版类主要设置文字操作public:/// 重写父类方法,提供个性化功能,请参考父类声明/*** @brief 设置文本样式* @param[in] uStyle 要设置的样式* @return 无*//*** @brief 获取文本样式* @return 返回文本样式*//*** @brief 获取指定状态下的文本颜色* @param[in] stateType 要获取的状态标志。原创 2024-04-29 16:20:48 · 206 阅读 · 0 评论 -
duilib 之 鼠标按下事件是如何处理的?
kEventMouseButtonDown,是duilib中自己定义的事件,意为 鼠标按下事件这里窗口事件被转换成了 duilib自定义事件处理。else。原创 2024-04-17 18:19:09 · 181 阅读 · 0 评论 -
duilib 分析 之 OnInitLayout() 运用的时机 及应用
布局初始化后,会调用这个虚函数。原创 2024-04-17 18:16:33 · 49 阅读 · 0 评论 -
duilib 基础 之 事件响应方法集锦
注意,将transBox mousechild设置为false,才会响应, 要不然,可能会被子控件响应去。可以添加 AttachBubbledEvent事件通知,子控件将鼠标消息,和冒泡一样,通知给父控件。如果,子控件也要响应鼠标,还要时间上述效果。原创 2024-02-05 11:16:14 · 213 阅读 · 0 评论 -
duilib 实现登录界面 之 样式设计
可以设置多个同层次的子BOX,但是显示时,只显示其中某一个子BOX有selectedid 属性,标识,显示哪一个子项可以看到,选中某项时,下面的箭头会出现,未选中时,会消失所以TabBox可以设置两个子项,一是选中显示子项,一是未选中,什么也不显示子项。原创 2023-11-20 15:22:49 · 454 阅读 · 8 评论 -
duilib属性列表.xml
<?xml version="1.0" encoding="UTF-8"?><Resources> <Global comment="定义了全局公用资源,包含了字体、class、文字颜色。定义Global标签的xml文件需要放到资源目录的根位置,目前命名为硬编码“global.xml”,详见GlobalManager::Startup函数代码"> <Attribute name="disabledfontcolor" default="0xFFA7A6A.转载 2021-06-07 10:39:30 · 699 阅读 · 0 评论 -
创建 一个 最基本的 duilib窗口过程
一、使用向导 生成windows桌面程序1、 创建win32Project2、组织结构此时,都是VS 默认代码TestPro.h#pragma once#include "resource.h"TestPro.cpp// TestPro.cpp : Defines the entry point for the application.//#include "stdafx.h"#include "TestPro.h"#de..原创 2022-05-24 12:20:07 · 781 阅读 · 1 评论 -
duilib中 窗口消息处理 常用小知识
其实不限于duilib, 也适用于其它框架目录一、消息处理小知识点1、判断那个按键按下2、获取光标位置3、在消息LPARAM lParam 参数中获得坐标位置4、将标题栏设置为 不可移动5、SW_SHOWNORMAL 会导致最大化窗口还原6、WM_KEYDON 按键消息7、当前光标位置8、最大化 与还原是 按钮样式9、WM_MOVE10、右键弹出菜单一、消息处理小知识点1、判断那个按键按下lParam & KEY_DOWN(VK...原创 2022-04-07 18:31:33 · 622 阅读 · 0 评论 -
duilib入门基础一 容器之 BOX、VBOX、HBOX布局及其子控件align排列方式
序 容器 duilib有以下主要布局容器Box(自由布局容器) VBox(垂直布局容器) HBox(水平布局容器) TabBox(多标签布局容器) TileBox(格子布局容器) ChildBox(子布局容器) ScrollableBox(可滚动容器)一、Box容器布局 Box容器及其扩展VBox HBox是其中最常用的容器。 相对Box来说,HBox, VBox更好理解些 1.1 VBox HBox VBox下的各个控件垂...原创 2020-10-30 10:37:05 · 2377 阅读 · 3 评论 -
duilib入门基础二 HBOX容器内 子控件margin定位规则
三 Box容器内,子控件margin定位规则 3.1 HBox margin定位 水平布局,因为指定了水平方向的排列, 所以,水平方向上是按顺序排列的3.1.1水平方向marign 指的是与前后控件的间隔 例如:如果指定了某个控件的 水平方向的 margin="100,0,0,0" //左上右下 , ...原创 2020-10-30 14:02:30 · 963 阅读 · 0 评论 -
duilib入门基础三 VBOX容器内 子控件margin定位规则
VBox内的子控件都是垂直布局,其上下margin都是相对于紧挨着的上下控件而言。水平方向的margin则是相对于容器左右边界而言,至于相对于左边界还是右边界,则是由halign属性决定的。1垂直方向margin1.1 与下个控件隔开距离 margin=0,0,0,100 1.1.1没有紧挨着的下个控件 <VBox width="stretch" bkcolor="gray"> ...原创 2020-10-30 16:04:40 · 619 阅读 · 0 评论 -
duilib入门基础四 BOX容器内 子控件margin定位规则
Box没有指定水平排列,也没有指定垂直排列 因此,halign valign都有效 而且因为没有指定排列次序,margin都是参照Box边界容器而言的 而margin中具体哪个参数有效,得看halign valign对齐方式1水平方向margin 1.1 halign=left (默认)valign=top(默认) 这种情况下,因为指定了水平方向从左开始排列 垂直方向从顶部开始排列 因此,margin中的右侧距离参数 和...原创 2020-10-31 11:08:02 · 687 阅读 · 0 评论 -
duilib入门基础五 简单示例之 文件选择框使用
duilib入门基础duilib入门基础一 容器之 BOX、VBOX、HBOX布局及其子控件align排列方式duilib入门基础二 HBOX容器内 子控件margin定位规则duilib入门基础三 VBOX容器内 子控件margin定位规则duilib入门基础四 BOX容器内 子控件margin定位规则目录duilib入门基础前言一、要实现的功能是什么?二、布局2.1 标题栏2.2 文本框和声音选择按钮2.3 slider控件2.4 与之相关的几个类原创 2021-01-26 16:22:46 · 743 阅读 · 0 评论 -
duilib入门基础 六 见见世面,duilib 基本控件 Button 能实现的界面一览
duilib入门基础六 见见世面,duilib 基本控件能实现的界面示例原创 2021-02-08 18:46:46 · 953 阅读 · 0 评论 -
duilib入门基础 七 见见世面,duilib 基本控件 复选框 单选框 能实现的界面一览
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习..原创 2021-02-10 10:57:23 · 956 阅读 · 4 评论 -
duilib入门基础 八 见见世面,duilib 基本控件 滑动条
duilib 快速入门duilib入门基础一 容器之 BOX、VBOX、HBOX布局及其子控件align排列方式duilib入门基础二 HBOX容器内 子控件margin定位规则duilib入门基础三 VBOX容器内 子控件margin定位规则duilib入门基础四 BOX容器内 子控件margin定位规则duilib入门基础五 简单示例之 文件选择框使用duilib入门基础 六 见见世面,duilib 基本控件 Button 能实现的界面一览duilib入门基础 七 见见.原创 2021-03-05 18:55:58 · 590 阅读 · 0 评论 -
duilib入门基础 九 见见世面,duilib 基本控件 组合框
duilib 快速入门duilib入门基础一 容器之 BOX、VBOX、HBOX布局及其子控件align排列方式duilib入门基础二 HBOX容器内 子控件margin定位规则duilib入门基础三 VBOX容器内 子控件margin定位规则duilib入门基础四 BOX容器内 子控件margin定位规则duilib入门基础五 简单示例之 文件选择框使用duilib入门基础 六 见见世面,duilib 基本控件 Button 能实现的界面一览duilib入门基础 七 ...原创 2021-03-15 18:00:42 · 666 阅读 · 0 评论 -
duilib入门基础 十 见见世面,duilib 基本控件 选项框 OptionBox
duilib 快速入门duilib入门基础一 容器之 BOX、VBOX、HBOX布局及其子控件align排列方式duilib入门基础二 HBOX容器内 子控件margin定位规则duilib入门基础三 VBOX容器内 子控件margin定位规则duilib入门基础四 BOX容器内 子控件margin定位规则duilib入门基础五 简单示例之 文件选择框使用duilib入门基础 六 见见世面,duilib 基本控件 Button 能实现的界面一览duilib入门基础 七 ...原创 2021-03-23 19:02:45 · 1279 阅读 · 3 评论 -
duilib 入门基础十一 在样式中写事件
duilib 快速入门duilib入门基础一 容器之 BOX、VBOX、HBOX布局及其子控件align排列方式duilib入门基础二 HBOX容器内 子控件margin定位规则duilib入门基础三 VBOX容器内 子控件margin定位规则duilib入门基础四 BOX容器内 子控件margin定位规则duilib入门基础五 简单示例之 文件选择框使用duilib入门基础 六 见见世面,duilib 基本控件 Button 能实现的界面一览duilib入门基础 七 见见.原创 2021-11-02 17:42:59 · 182 阅读 · 0 评论 -
duilib 入门基础十二 样式类
比如,需要一个按钮,按钮的样式写定了,如果下次还需要这个样式的按钮的话,还得重新写一遍样式,这样就很麻烦,效率也很低。而如果,我们能把这个样式组合写成一个字符串类,给个名称下次,某控件需要用这种样式时,直接将这个样式类名赋值给这个控件,那这个控件就有了这些样式了,也省的自己动手一一去再重复写。2)样式类应用3)样式类效果 这个并没有找到详细文档,而是实际使用时,自己总结出来的。1)、样式类写法首先起个名字其次所有的属性value=" " ,包含到双引号之间再次,双引号之内的引号原创 2022-06-24 16:19:48 · 249 阅读 · 0 评论 -
duilib 入门基础十三 窗口基类
duilib 窗口基类 便于对所有窗口进行统一管理原创 2021-11-22 18:17:51 · 645 阅读 · 0 评论 -
duilib 入门基础十四 菜单及子菜单
下面,通过一个简单窗口,演示下,duilib菜单的创建使用过程。原创 2022-08-20 18:47:55 · 356 阅读 · 0 评论 -
duilib 入门基础15 动态创建菜单
有时候,多少人菜单项,是无法实现确定的,而是有程序动态创建的,所以这时候,就需要动态创建菜单。原创 2022-12-23 17:21:07 · 456 阅读 · 0 评论 -
duilib 入门基础16 记录窗口大小
默认情况下,即使拉伸后,下次运行时,duilib窗口大小还是不变的,这里提供一种方法,用于记录窗口大小。原创 2023-04-25 17:29:33 · 867 阅读 · 0 评论 -
duilib 进阶之 事件发送、截取原理分析
duilib中,事件发送、截取、扩展 原理分析原创 2023-09-19 14:46:29 · 125 阅读 · 0 评论 -
duilib 进阶 之 list 容器使用 及扩展
比如列表项设置为mousechild为false时, 点击列表项的任何位置都是一样,即使点的是个BUTTON,都是响应列表项选中事件。其中,AttachClick,AttachBubbledEvent 写一个就行,两者作用一样,我这里是为了演示说明用,才这么写的。点击除这个BOX之外的列表项,其它位置时,因为其它位置没有其它子控件,这时候,有列表项处理点击事件,所以会响应列表选中事件。比如子控件有一个BUTTON,则点击BUTTON时,BUTTON会响应这个点击事件,这时候列表不在响应选中事件。原创 2023-09-21 17:18:07 · 429 阅读 · 0 评论 -
duilib 之 各种消息框
本文主要介绍,使用同一个布局文件,生成不同样式消息框是如何实现的。原创 2023-09-28 15:58:05 · 138 阅读 · 0 评论 -
duilib 控件位置
目录一、查找位置1、控件数量2、获得元素位置3、根据位置 查找控件二、位置变换1、交换两控件位置2、设置控件索引三、添加、删除元素1、添加元素1)、在末尾添加元素2)、在指定位置添加2、删除元素1)、根据指针寻找元素 删除2)、根据指针索引,移除控件3)、移除所有控件四、扩展 不同容器间 元素交换1、不同容器中,交换元素2、代码分析1)、AutoDestroy2)、将控件移动到另一个容器中逻辑2、获得元素位置这是最简单的情况,duilib Box容器已经有了代码这种情况,只是改原创 2022-06-17 18:19:25 · 378 阅读 · 0 评论 -
duilib 之 动态改变控件属性
duilib 中 ,根据不同场景,动态改变控件属性的 各种方法策略原创 2023-11-15 10:23:08 · 219 阅读 · 0 评论 -
duilib msg消息框扩展,返回更多信息
使其回调为更多信息的回调函数。回调函数中,增加额外信息。消息框,结束时,返回回调信息。原创 2024-01-31 10:18:35 · 164 阅读 · 0 评论 -
duilib 理论分析 之 窗口绘制过程
是Windows消息的一种,用于在窗口被创建之前发送给窗口过程(Window Procedure)。通过上述分析,可知道HandleMessage 先调用的是 new的 派生实际类的那个 重载函数。在这种情况下,将会根据指针所指向的对象的实际类型调用相应的函数。并通过SetWindowLongPtr,把窗口指针存放到窗口的额外空间中,以便后续使用。因为这里调用的是虚函数,所以会根据指针所指向的对象的实际类型调用响应的函数。结构体中的成员,其中包含了创建窗口时传递的参数。获得窗口指针,通常的做法是在。原创 2024-01-17 14:39:32 · 162 阅读 · 0 评论 -
duilib内核原理分析 之 窗口 关闭流程
2、延时关闭这里重要是这一段也就是,调用Close后,并不是立即发送WM_CLOSE消息,而是延时300msclose后,这个窗口还没销毁完毕,这时候再调用SingletonShow,得到的窗口还是本身,然后,过会再执行窗口销毁工作, 这时候 morePepopleForm_ 这个指针就是野指针,出问题了。 下面是具体的分析过程,要分析为何如此,就得先了解WindowEx 类了窗口类 ,尽量都继承自 public nim_comp::WindowEx因为,此类有原创 2022-06-07 15:22:12 · 558 阅读 · 2 评论 -
duilib 多线程机制
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习..原创 2021-06-25 15:40:12 · 811 阅读 · 0 评论 -
duilib XML文件,拆解成 子项布局文件 之 动态加载列表控件
0)序如果,XML篇幅过大,或涉及到重复的组件,可以考虑将XML拆解为多个XML布局文件,拆解加载duilib提供了根据子XML文件,返回Box*的函数功能本文提供个多少示例,用以演示动态加载用法1)列表项 这估计是最常见的场景了, ListBox容器中,里面的BOX容器都是动态添加的, 这时候就可以将ListBox子项单独拆解出来 比如: <VListBox class="xn...原创 2020-09-22 13:55:20 · 598 阅读 · 0 评论 -
duilib 实现 可复用的模态对话框基类
序 本文旨在 打造可复用的 duilib模态对话框 基类所谓模态对话,就是模态对话框出现时,主窗口不能进行任何操作。duilib中的Msgbox就是模态对话框模态对话框的核心实现很简单但本文关注点在于打造可服用的模态基类构造一个自己的模态框基类,有具体模态显示需求时,只需由此基类,派生下就可以了。0)模态对话框核心代码 模态对话框显示的时候 ,使得此模态对话框的 拥有者窗口,通常是父窗口禁止响应 ::EnableWindow...原创 2020-09-21 17:57:58 · 653 阅读 · 0 评论 -
duilib 之 搜索查找控件 总结
目录一 duilib自有的控件搜索 及封装1、基本搜索控件函数 FindControl2、Box容器,自有的搜素子控件函数3、为了方便在窗口中,进行查找,duilib基本窗口类Window,又对查找做了封装4、注意项 FindSubControlsByClass5、自己的扩展1)查找第一个父控件2)查找顶层孩子二 应用实例本文主要总结 在duilib中,搜索控件的方法。大部分是全局搜索,或由父控件搜索子控件还有一部分是逆向搜索,也就是知道了子控件, 逆向搜索满足条件的父控件查找,一般指的是在容器B原创 2020-09-09 15:40:19 · 996 阅读 · 0 评论 -
duilib 自定义HWND窗口显示控件
应用如果窗口中,有自定义的控件,该窗口需要重载CreateControl这个函数 virtual ui::Control* CreateControl(const std::wstring& pstrClass) override; ui::Control* ChatroomForm::CreateControl(const std::wstring& pstrClass) { if (pstrClass == _...原创 2020-08-20 14:01:39 · 1590 阅读 · 4 评论 -
duilib 实现截屏选取功能分析
本文关注点不再截屏而是截屏选取工具1首先肯定是个透明窗口,且置顶并且是工具窗口(任务栏不显示窗口图标)窗口样式<?xml version="1.0" encoding="utf-8"?><Window shadowattached="false"> <Box > <VBox name="track_box" margin="200,200,200,200" bkimage="file='screen_bord...原创 2020-08-14 16:29:56 · 585 阅读 · 0 评论 -
固定在主窗口指定位置的,悬浮窗实现
一需求有时候会有这样的需求,主窗口上,需要悬浮一个子窗口子窗口固定在主窗口指定位置,随主窗口移动而移动效果上,就像是主窗口本身的部分,但实际上是另一个悬浮在主窗口之上的窗口如下图所示:二实现首先,创建一个顶层窗口,且不让其在任务栏显示图标在主窗口初始化后,显示到主窗口适当位置在主窗口SIZE改变或MOVE时,同时改变子窗口位置2.1 创建子窗口 pHoverForm_ = (HoverForm*)(nim_comp::W...原创 2020-10-14 11:19:04 · 1088 阅读 · 0 评论