
Duilib
文章平均质量分 52
只要思想不滑坡
这个作者很懒,什么都没留下…
展开
-
duilib中增加文本滚动展示控件(跑马灯)
对于可能有比较多的文本滚动控件需求的界面(比如列表或者九宫格布局之类的子控件),第一种管理起来稍有不便,不如直接派生新控件,每个控件自己管理自己的滚动。,这里的CScrollLabelUI控件就是文本滚动展示控件,设置滚动间隔,每次滚动像素,滚动方向(横向滚动(根据步进值支持向左或向右设置),垂直滚动(根据步进值支持向上或向下设置))2.增加构建文本位图的方法,将所需文本根据控件宽高,textpadding,多行,字号等属性,预先绘制成一个位图,选入到兼容DC里面。原创 2025-04-08 10:48:29 · 153 阅读 · 0 评论 -
给EmEditor添加自定义外部工具DuilibPreviewer
2.左侧选择 显示,右侧就看到主题了,建议主题下拉框里直接选择MinimalZen,挺省事的,想要自己折腾配色方案的,自己去根据下边的条目一点一点设置就行了。duilib是一款xml描述UI布局的优秀的c++开源界面库,为了方便开发布局UI,有网友制作了预览工具DuilibPreviewer,源码链接。3.点 按下新的快捷键 下发的编辑框,按下你想用的快捷键,比如ALT+F10,编辑框出现你按下的快捷之后,点分配。4.看到快捷键到 当前键 下边的框里,然后点确定,就设置好了,可以自己按快捷键试试。原创 2023-11-20 11:23:43 · 401 阅读 · 0 评论 -
duilib的richedit中嵌入超链接
duilib里面,给richedit控件添加超链并处理点击响应的演示。原创 2023-02-06 10:49:00 · 894 阅读 · 0 评论 -
duilib 动态多语言支持
最近又有朋友问我duilib多语言的支持,干脆做个demo,顺便简单写个介绍,大家仅供参考,有更好的方案页欢迎交流。demo地址:https://github.com/juhuaguai/duilib/tree/master/MultiLanguagDemo上图是demo的效果,不用重启应用程序,直接切换,界面直接就更新了。原理就是依赖于duilib里PaintManager里面的多语言接口。核心是%{i},i是整型,可以认为是ID。1.设置控件的文本内容为%{0};2.通过CPa.原创 2021-12-29 17:34:34 · 1160 阅读 · 0 评论 -
再谈duilib控件自绘
之前写过一篇duilib自绘,其中主要介绍了PostPaint。这个由于机制原因,会导致一直绘制在本窗体最上层(当然还是比子窗口级别低的),这样有时候切换tab页之类的,会出现自绘的东西还在,不能完美跟随控件。下面重新介绍下duilib的绘制流程。先介绍Paint,DoPaint,PaintBkcolor,PaintBkImage,PaintStatusImage,PaintText,PaintBorder,DoPostPaint 这些paint函数的大致作用以及调用的时机。Paint函数是源头,从原创 2021-09-10 16:59:13 · 1635 阅读 · 0 评论 -
博主个人用的duilib版本
github:https://github.com/juhuaguai/duilibgitee原创 2021-06-09 11:43:44 · 958 阅读 · 1 评论 -
duilib里面隐含的一个可能递归的bug
duilib的容器的滚动条是根据子控件来判断是否展示的。如果父控件可以根据情况在SetPos里面动态调整子控件的大小,在这个条件下,存在这样一种情况:1.滚动条一开始不展示。2.容器控件SetPos里面自动计算出子控件需要展示滚动条,ProcessScrollBar里面展示了滚动条并重新调用SetPos来重新计算子控件位置。3.滚动条展示后,SetPos里面重新调整了子控件的大小,计算了滚动范围等,ProcessScrollBar里面发现新的子控件大小算出来的范围又不需要滚动条了,于是不展示滚动原创 2021-02-25 19:44:18 · 193 阅读 · 0 评论 -
duilib支持apng,gif支持文字、背景、图片的file/source/dest/xtiled/ytiled/mask等
duilib官方库提供了个gif控件,用的是gdi+解析和绘制的,同时没有接入duilib控件本身的背景色,文本等绘制,包括图片的source/dest/xtiled/ytiled/mask等属性也都没有做支持。可以满足基本的使用需求。我需要一些效果比较好的动态图来做展示,gif显然不行,另外的动图就是webP和Apng,最决定先支持apng,webP后续有需求的话,再研究支持。源码仓库地址:https://github.com/juhuaguai/duilib其中关于gif和apng的改动原创 2020-12-31 16:41:26 · 721 阅读 · 0 评论 -
duilib直接加载HBITMAP作为背景图
很简单,利用CPaintManagerUI的方法即可。const TImageInfo* AddImage(LPCTSTR bitmap, HBITMAP hBitmap, int iWidth, int iHeight, bool bAlpha, bool bShared = false);该函数作用是添加位图到自己的资源里面参数说明:bitmap:图片名,类似于xxx.png等...原创 2020-03-04 18:05:08 · 1210 阅读 · 0 评论 -
AlphaBlend失败,错误码87
如题,写测试程序的时候遇到了AlphaBlend函数失败,使用getlasterror获取错误码是87。找错找了好久,下面记录下。1.源DC的位图不是32位的。源DC就是指该函数的第二个HDC,第一个是目标DC,这个在微软的BLENDFUNCTION结构体说明(见msdn)里有提到。排查起来也容易,利用BITMAP bmp;GetObject(hBitmap, sizeof(BIT...原创 2020-03-04 17:30:42 · 1032 阅读 · 0 评论 -
不定义大量的消息宏实现事件与处理关联起来(避免写很多消息宏定义和消息映射)
标题也许不恰当,不必在意。本文主要是记录一种 消息(事件)==》消息响应(事件处理)的映射方式,避免使用大量的消息宏定义。对于传统的win32窗口、或者mfc窗口、或者duilib窗口等,常见的使用场景比如:工作线程执行某个函数处理=》处理完毕通知主线程(UI线程)=》主线程收到通知做出对应的处理在这个过程中,通知主线程通常使用PostMessage或者SendMessage等函数来发...原创 2019-07-31 16:30:14 · 368 阅读 · 0 评论 -
子窗体不会触发WM_LBUTTONDOWN,只会触发WM_LBUTTONUP消息的原因
这里感谢下https://blog.youkuaiyun.com/wyy1991990/article/details/19629831文章的作者,要不是这篇文章,我简直要怀疑人生了。子窗口无法响应WM_LBUTTONDOWN消息,但是响应WM_LBUTTONUP,原因是和父窗口处理WM_NCACTIVATE相关。下面是另外一篇文章的关于这个消息的说明,不确定是否准确当WM_NCACTIVAT...原创 2019-07-22 15:47:11 · 2755 阅读 · 0 评论 -
duilib窗体最小化与还原时会有小的windows原生标题栏在左上角闪现一下,并且没有动画效果的解决办法
标题略长,废话不多说,先描述下现象。当我们使用duilib开发窗体时,通过反复点击在任务栏的窗体图标来使窗体不断的最小化与还原,会发现原窗体位置左上角会有原生的windows的标题栏的东西闪过,虽然不明显,而且消失速度很快,但是反复测试仍然可以观察到。同时,原有的最小化到任务栏与还原是有一个过渡动画效果,最小化时会看到是变小收缩,还原时是看到逐渐扩大还原,这个效果也没有了。测试官方demo......原创 2018-11-01 15:09:23 · 1627 阅读 · 0 评论 -
duilib资源加密
github的duilib官方仓库是不支持zip加密的资源文件的。通过修改替换相关的zip解压代码来实现支持。我搞了一份并且测试没有问题。至于说解压速度之类的影响,在github上我说可能有所降低,实际上应该是没什么影响的。觉着降低可能是我的错觉。github地址:https://github.com/juhuaguai/duilib 有兴趣的可以自行下载查看,代码改动量并不大。...原创 2018-08-09 10:06:02 · 881 阅读 · 0 评论 -
Duilib技巧:背景图片平铺
贴图的描述方式有两种,其实看 // 1、aaa.jpg // 2、file='aaa.jpg' res='' restype='0' dest='0,0,0,0' source='0,0,0,0' corner='0,0,0,0' // mask='#FF0000' fade='255' hole='false' xtiled='false' ytiled='fals...转载 2015-12-08 10:39:49 · 569 阅读 · 0 评论 -
duilib中将xml封装为控件简单示例(简单自定义控件,封装几个基本控件合为1个自定义控件)
使用duilib的时候,难免会有这样的需求:某一块Container(Layout)以及里面的布局需要重复用,不想每次都复制粘贴这么多,要不然xml太大了;通过继承来自定义一个控件,比如CButtonUIEx之类的,想让他像button一样在xml中被识别;xml里面的东西太多,比如tabLayout的子页面不想都写在这一个xml中,想一个xml对应一个子页面,子页面作为控件而不是子窗...原创 2017-04-28 17:05:52 · 1918 阅读 · 0 评论 -
duilib 滚动条不能拖动 问题处理
遇到过很多次群里朋友问:为什么滚动条不能拖动,点击两端的按钮可以滚动,通过鼠标滚轮也可以滚动,就是鼠标拖动时拖不动?这是个提问次数较高的问题。下面的内容只针对可能的原因中的一个,也是最可能的原因。因为通过鼠标拖动滚动条,实际内部用到了定时器,具体有兴趣的可以查看duilib的源码。我们的程序在处理时常常也会用到WM_TIMER消息,通过拦截WM_TIMER消息来做一些定时器处理,不能拖...原创 2017-05-10 16:51:29 · 2234 阅读 · 1 评论 -
duilib中获取的控件的位置或者大小不对的可能的原因
duilib初学者可能总会有这样的疑问:为什么我获取的控件位置或者大小和我想象中的不一样?位置不一样可能的原因:1.xml中直接配置的位置和实际显示之后的位置确实是不一样的.xml中设置的位置(相对或绝对)都是基于他的父控件左上角.而实际显示之后获取的位置,是基于整个客户区的左上角;2.控件的位置的计算都是在WM_PAINT消息处理中进行的,在这个消息处理之前,获取到的位置都是旧的;...原创 2017-06-14 11:02:41 · 2603 阅读 · 0 评论 -
duilib中list拖动表头大小内容大小跟随变化的一个示例
偶尔有群里的朋友在问duilib的List拖动列表头时内容大小如何跟随变化。我这边用新版的duilib代码测试是没有问题。duilib官方代码仓库https://github.com/duilib/duilib个人的修改的代码的仓库:https://github.com/juhuaguai/duilib下面是一个xml示例,用duilibpreview工具预览就直接能够测试拖动。动态添原创 2017-12-20 19:26:49 · 1111 阅读 · 0 评论 -
duilib的xml预览工具duilibpreview
由于官方在一次大更新duilib代码之后,自带的设计器源码没有更新,所以自带的设计器已经弃用。貌似最新的github官方库已经看不到这个设计器源码了,不过历史版本应该还是能看到的。但是即便有以前的设计器,设计器的bug也是多多,用起来存在各种各样的问题,所以一致的态度都是不推荐使用设计器。我的看法是:在入门的时候,可以跟着以前旧的入门简明文档来用设计器,纯粹的学习时帮助理解。这个入门简明文原创 2017-12-21 09:54:49 · 4310 阅读 · 0 评论 -
duilib将xml和图片合并到exe资源中或者dll中
直接上demo的编写步骤了。1.创建一个win32的空的工程用作demo工程。从其他工程复制stdafx.h、stdafx.cpp、testmain.cpp、mainwnd.h、mainwnd.cpp文件过来使用。我是从TestAlphaWindow工程中复制过来的。2.添加现有文件,改写代码等,使之正常编译通过。具体的改写就略过了。主要是删除无用的代码。预编译头等工程设置自己也设置好。原创 2017-12-21 14:20:26 · 2008 阅读 · 2 评论 -
duilib的Combo控件滚动条不显示的问题
这是一个经常被群里朋友问到的问题。群里解释的次数太多了,这里我写一篇文章方便遇到同样问题的人通过搜索引擎能够解惑。duilib的Combo控件的下拉框是一个独立的子窗口,类名:CComboWnd。从duilib的源码可以知道,CComboUI控件在Add到布局上的时候,自己的m_pManager还是当前所在窗口的管理器指针,这样默认的滚动条样式图片等都在其中。但是下拉框子窗体CComb......原创 2017-12-18 18:15:32 · 1417 阅读 · 1 评论 -
duilib创建自定义控件
我之前也写过一片封装xml为一个容器的文章,只是写的很随意,仅仅贴出了一个demo的地址。在群里还有一些刚刚接触duilib的朋友们问到duilib自定义控件的问题,这里我转载一篇redrain大佬的博文。主要是这篇文章写的太好了,我们直接参考理解就好,我写的肯定没这个好。原文地址:http://blog.youkuaiyun.com/zhuhongshu/article/details/45362751转载 2018-01-03 16:25:02 · 2368 阅读 · 0 评论 -
duilib自绘
有时候我们在使用duilib的同时,可能想自己在窗体上绘制一些图形、线条等等,但是发现绘制不上去。emmm,不用烦恼,其实是绘制上去然后又被duilib自身的绘制机制给擦掉了应该。那么正确的绘制姿势呢?方法1:从CControlUI派生一个子类,然后直接重写DoPaint接口,在里面绘制即可。这样有1个限制,duilib默认是后添加的控件Z序高,而实际绘制全部控件的时候,Z序高的控件在上层...原创 2018-01-31 11:27:47 · 2445 阅读 · 0 评论 -
duilib将资源文件压缩成zip并打包到exe的资源中
本文参考了redrain大佬的http://blog.youkuaiyun.com/zhuhongshu/article/details/40146239文章。因为原文是基于WinImplBase类的,个人习惯基于CWindowWnd来做。因此额外摘抄一部分并微微调整一下代码,以作记录。整个程序的开发跟正常的 使用资源目录+xml+图片 这种方式流程一样。也可以先用这种方式来开发,方便开发调试。整个开发完成后...原创 2018-03-06 11:08:17 · 4229 阅读 · 0 评论