5 Star 8 Fork 10

juhua / duilib

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

duilib

由官方的duilib( https://github.com/duilib/duilib ) 复制过来的,仅为了个人学习使用。
可以使用vs2008打开,新增一些学习测试用的demo,之后也可能会做很少的修改,但代码尽量会与官方保持一致。
有任何问题请联系我,邮箱juhuaguai@yeah.net
腾讯使用的的duilib修改版: https://github.com/TencentCloud/TIMSDK/tree/117305e08ec67c3319883e71d1f3ee5f018016af/Windows/Demo/Basic/duilib
网易使用的duilib修改版: https://github.com/netease-im/NIM_Duilib_Framework/tree/master/duilib


## 说明:
## 官方库改为本仓库代码后,会遇到CDuiString的一些编译或者运行报错,原因在于我调整了CDuiString的代码(见下方第55点说明),解决方法就是重新使用本仓库的duillib的头文件和.lib重新编译和链接生成自己的程序,解决其中的编译报错(主要是CDuiString转换为LPCTSTR时报错,修改CDuiString.GetData())即可。
## 有问题欢迎反馈!

### 2020/12/31更新移除掉了libpng相关库,apng解析绘制直接使用stbimage和自己实现的代码来处理了。同时gif也由gdi+解析改为了stbimage处理。
这样看来是有机会将gif和apng统一成一个控件的,进一步来看考虑,是有机会让所有支持背景图的控件支持gif和apng的,暂无需求先不考虑了。


本仓库改动日志:
1.将解决方案sln切换为vs2008打开
2.添加webbrowser控件对js方法window.close的响应
3.给combo控件增加selectedid属性,以便于在xml中可以直接配置默认选中的item
4.给combo控件增加textcolor/font/align属性,便于自由配置combo控件显示的文字的颜色/字体/水平对齐方式
5.给combo控件的下拉窗口增加Notify过滤,将下拉窗口中的DUI_MSGTYPE_ITEMCLICK,DUI_MSGTYPE_ITEMACTIVATE,DUI_MSGTYPE_LINK ,DUI_MSGTYPE_CLICK异步转发到combo控件所在的窗口的notify中
6.修复listElement listContainerElement标签的selected属性false不生效的bug
7.修复combo下拉框的滚动条不能使用default标签中定义的滚动条样式的问题
8.修复容器的滚动条不能正确取消hot状态的问题
9.修复Combo下拉框滚动条相关标签vscrollbar/hscrollbar/vscrollbarstyle/hscrollbarstyle无效问题;
10.修改所有容器设置vscrollbarstyle属性就默认显示vscrollbar(即便vscrollbar属性值为false)、设置hscrollbarstyle属性就默认显示hscrollbar的处理,使滚动条的显示由vscrollbar/hscrollbar的属性来控制
11.给Button、Edit、combo、option控件增加gdi+的文字绘制,仅仅是为了在半透明窗口中抗锯齿,一些文字阴影渐变发光等特效并没有引入
12.修复Label控件采用gdi+绘制时单行限制失效的问题
13.给button控件增加指定光标样式的属性 cursor ,值类型为字符串。如cursor="arrow"指定hot状态光标样式为箭头样式
14.给richedit补充maxchar属性
15.给CTextUI控件类增加获取links数量和对应文字区域(RECT)的接口,以便于在标题栏使用时,能够更加准确的进行事件响应和拖动过滤
16.修复edit获得输入焦点时,控件高度大于文本高度过多时,会显示异常的bug;
17.修复header="false"不能正常隐藏list表头的bug,原版用header="hidden"也能够隐藏,但是个人认为不够统一,就补充个header="false"
18.对半透明窗口的绘制做了调整,修复半透明窗口中背景色的显示可能不是我们预期效果的bug
19.修复VerLayout中padding的一处bug
20.修复当bordersize的left为0时,其余3边的边框也不绘制的bug
21.修复了某些情况下控件的右边框和下边框绘制不出来的bug;当边框宽度为奇数时保证边框是绘制在控件内部的.
22.对子控件的remove默认改为同步销毁。
23.修正第一焦点是Edit时,窗口创建后edit没有默认处理焦点状态的问题;修复当SetFocusNeeded参数为NULL时,窗口初始仍然会给控件设置焦点的bug
24.修复在DUI_MSGTYPE_WINDOWINIT消息中去同时设置窗口大小和layered时可能不生效的bug
25.对Label动态文本计算所需宽度的结果进行修正,当gdi+绘制文本时宽度能够更加准确
26.修复richedit控件动态创建时某些属性可能不生效(需要先设置属性再add到布局才会生效)的bug,涉及的属性包括滚动条,自动滚动等。
27.richedit的光标颜色调整为跟随文本颜色,避免在与背景色接近导致看不出来光标
28.修复当richedit控件的父容器滚动条滚动后,richedit文本位置不正确的bug
29.给CContainerUI增加了DoPostPaint调用,用来修复EndDown不能及时滚动到最底部(总是差最后一行)的bug
30.修改UIlib.h以便于兼容cef和duilib结合使用
31.修复layeredimage绘制可能不正确的bug;修复开启LayeredImage但是不设置图片时文字穿透的问题。
32.修复duilib在使用list添加表头后异常的bug,例如duipreview在预览包含ListHeader的xml时会无法预览.
33.修复多字节工程编译时一处笔误错误,建议最好还是用unicode版的
34.richedit增加setcaret接口来控制是否显示输入光标
35.给richedit添加个DUI_MSGTYPE_LINK的notify消息
36.给richedit增加FocusImage和disabledImage的绘制
37.给Label和Button控件增加focus背景色和disabled背景色
38.调整透明窗口的绘制,不再采用内容与背景混合的方式,改为先绘制背景,再在背景上绘制内容。除图片和颜色绘制外,文本,线条,矩形,圆角矩形等的黑色全部修正为0xFF000001(原本应该是0xFF000000).
39.修复绘制ARGB背景颜色时,透明度无法正确被绘制的bug(比如0x1EFFFFFF)
40.修复文本颜色值为RGB(而非ARGB)时文本完全透明的bug
41.给字体增加删除线属性支持,Font标签中的strikeout="true"表示该字体带删除线
42.button增加DUI_MSGTYPE_MOUSEENTER和DUI_MSGTYPE_MOUSELEAVE的notify发送
43.修复richedit没有textchanged消息的问题
44.给richedit增加一个SetPasswordChar的导出,用以设置密码密文字符
45.combo控件下拉框样式进行调整。使用Item的背景色,并且移除下拉框的边框
46.移除combo中selectedItem中对于下拉框子项visible的判断
47.修改webbrowser代码,给webbrowser增加JS调用c++的处理。增加了JS与C++互相调用的注释,并在CustomControlDemo中增加了相关示例
48.将duilib的zip解压更换掉.支持了zip加密。
49.增加一个计算文本区域大小的函数SIZE CRenderEngine::EstimateTextSize
50.修复treenode删除子控件时没有完全删除的一个bug
51.修复gif控件一处可能潜在的句柄泄漏
52.完善TileLayout,增加固定行的属性,当设置固定行之后,子控件将自动向右摆放,顺序是自上而下,自左而右,超出可以使用水平滚动条。
53.修复鼠标在gif控件上滑动鼠标滚轮滚动条不会滚动的bug
54.给Control增加ForeImage属性。结合Png图片可以方便的做出圆形头像等效果
55.移除了CDuiString对于operator LPCTSTR() const;的重载,用来支持对操作符==的更多的重载,修改了部分源码和部分demo的源码以便于正常编译
56.补充设置滚动条位置时是否传递事件的参数。手动调用接口改变滚动条位置时,可以设置参数来决定是否传递事件通知
57.CProgressUI控件,文本初始化设置为垂直居中并且单行
58.升级了duilib的图片解码库stb_image由原来的2.05升级到2.19
59.引入官方库其他人提交的PR,用于修复Edit输入状态下的右键菜单
60.简单的给richedit增加个系统的复制粘贴右键弹出菜单
61.修复richedit里面的两处笔误;给richedit中CTxtWinHost类的成员变量名增加m_前缀
62.引入官方库的关于List排序的修复
63.引入官方库的关于List排序后选中错误的修复,同步关于SelectItem参数传递错误的修复,见https://github.com/duilib/duilib/pull/182
64.引入官方库的修复UIRender某些情况下占用文件不释放的bug,见https://github.com/duilib/duilib/pull/186
65.滚动条滚动后位置优化。
66.同步官方库的一个pr,关于CDuiStringPtrMap Remove函数问题修复
67.修复win10系统上,存在Showmodal子窗口时,主窗口仍然能够响应鼠标滚轮消息的问题
68.修复画边框border时,指定为虚线风格不生效的bug.(虚线风格要求border的宽度只能为1)
69.修改showhtml绘制时,标签还需要配合multiline="true"才能生效的问题
70.修改容器的setpos代码,当大小可能变化时,重置容器的滚动条滚动范围。用来修复自动布局时,自动大小的子控件,大小计算不对的问题。(比如简单的自动居中布局,点击显示桌面让窗口最小化,再点击窗口显示时,可能会出现滚动条)
71.修复滚动条不在起始点时,调整List的大小,item与header位置不对应的bug
72.修复Option按钮为选中且禁用状态时,不显示禁用状态的背景图,显示的是选中状态的背景图的问题
73.新增了一个菊花样子的loading控件,gid+绘制。来自于网友提供的loading菊花源码中提取修改
74.新增了一个图片旋转控件,gid+绘制,可以自由控制图片的动态旋转。来自于网友提供的圆环旋转源码中提取修改
75.新增了一个支持gif的按钮控件,参考了官方的gif控件
76.支持设置combo的下拉框的边框大小和颜色
77.调整Button按钮的hotbkcolor和hotforeimage的绘制,让他们能够正常叠加
78.给button按钮增加hotbordercolor属性,能够设置鼠标悬停时按钮的边框颜色
79.调整button按钮的hot背景色与背景图的叠加,当处于鼠标悬停状态并且设置的有Hotbkcolor时,先绘制Hotbkcolor,再在上层绘制背景图
80.调整option控件的选中背景色与背景图的叠加,当处于选中状态时,先绘制SelectedBkColor,再在上层绘制背景图
81.给richedit增加tipvalue,通过tipvalue和tipcolor可分别设置提示文本的内容和颜色。主要参考redrain的duilib库中的实现
82.给richedit增加开启关闭密码属性的接口
83.caption属性的bottom增加值为-1的支持,为-1时表示caption区域一直到窗口底部
84.给窗口类引入IsHTCaptionFlag函数,用于判断指定控件是否不被Caption区域过滤,如果为true,则说明指定控件的区域可以作为caption区域
85.修复textui控件中非showhtml时a标签数量计数错误的问题。
86.修复richedit在win7系统上内容可能被缩小的bug。(richedit作为子控件放到容器中,如果容器中包含有滚动条,滚动容器的滚动条,richedit的内容可能会随之缩放)
87.修复某些情况下showmodal不能返回正确的关闭值的问题。(比如在子窗口标题栏被鼠标左键按下不松开时调用了Close来关闭窗口)
88.新增了一个动画控件用来支持apng,使用了libpng来解析生成每帧数据,GDI+去绘制,同时支持设置背景色和文本
89.新增了一个支持apng动画的按钮控件,使用了libpng来解析生成每帧数据,GDI+去绘制,同时支持设置背景色和文本,支持背景图dest设置。
90.修复图片旋转控件旋转时图像像素漂移的问题。
91.PaintManager新增了字体相关静态接口,可以使用ttf文件或者ttf内存流来引入新字体,比如PingFang字体,思源字体等win没有自带的字体。在窗体创建之前调用。AddTTF之后,可以像使用系统字体(比如宋体、微软雅黑)那样在xml或者程序中使用。注意字体版权问题。
92.gif和apng解析都使用stbimage解析,同时绘制采用gdi,gif抛弃了gdi+,apng抛弃了libpng库。这样gif控件和apng控件的背景图就类似普通控件背景图,支持file,source,dest,xtiled,ytiled,mask等属性了。
93.修复图片仅设置xtiled=true不设置ytiled时,平铺效果不对的问题。
94.新增combo的下拉框的背景色的属性dropbkcolor,可以设置下拉框背景色而不再使用itembkcolor作为下拉框背景色了。itembkcolor仅仅是下拉款里面item的背景色。
95.button控件增加hotbordercolor属性的解析和使用,之前支持hotbordercolor,但是xml解析时并没有解析该属性,该属性表示鼠标悬停状态时控件边框的颜色。
96.给Combo控件增加mousewheel属性,用来控制Combo是否支持滚轮切换选项的操作,默认为true。当mousewheel为false时,鼠标移动到Combo控件上,滚动滚轮不会引起combo选项的改变。在一些combo放到有滚动条的布局的情况下,可能比较有用(可以有效防止鼠标滚轮的误操作)。
97.给Label控件增加autocalwidth,autocalheight属性,默认为false。用来表示改控件是否根据文本内容自动计算宽高。请仅在float=false下使用。如果同时存在指定了width或height,那么width的优先级高于autocalwidth,height的优先级高于autocalheight。常用于单行文本时根据文本内容自动计算调整宽度,多行文本给定宽度时自动计算并调整高度。(使用过程中有问题可以提issue给我)。
98.在CRenderEngine中增加两个转换svg格式的方法:
SvgFile2PngFile将svg文件转换成指定大小的png图片存到磁盘;
SvgFile2HBITMAP将svg文件转换成duilib的HBITMAP,可以不存磁盘直接addimage来调用。

其他改动:
1.修改了几处官方库中的笔误。
2.会同步官方库的修复,并且一些提交到官方库的pr如果我认为没问题也会抄过来,一些issue如果我能够优化的,也会尝试优化并提交,Q群里有反馈的bug或者改进我也会抄过来
3.增加个编译静态的配置。自己的工程引入了静态库报一些无法解析之类的,尤其是dllimport之类的,这说明需要将UILIB_STATIC也加入到自己的工程中。因为dllimport之类的显然是动态库用的东西。
4.引入了DuilibPreview工具和源码,可以方便的在editplus和notepad++中预览xml文件,可以一边修改xml一边预览啦,具体参看DuilibPreview工程目录下的说明
5.combo的itemfont建议都是用 shared="true"的字体,因为非共享资源的字体并没有加载到下拉框的PM中。其实最好所有的字体都用shared="true",这样可以避免多个窗口重复的添加同样的字体,也方便管理。
6.增加了一个gifbutton控件,放到了CustomControlDemo中
7.收集了一些来自网络的duilib相关的代码,分享出来供大家参考使用
8.提交个扩展容器,支出鼠标移入移出。移入移出时容器背景图和背景色可以自动切换,同时可以指定子控件是否跟随移入移出来显示隐藏。
9.备注下,滚动条可以指定每次滚动的幅度,例如:hscrollbarstyle="height="0" scrollunit="726"" 指定了滚动条宽度为0,每次滚轮滚动幅度为726像素
10.给两个demo引入系统自带的CS_DROPSHADOW的边框阴影测试,需要系统开启默认阴影效果,代码:SystemParametersInfo(SPI_SETDROPSHADOW,0, (PVOID)TRUE, 0);
11.增加了窗口阴影属性,不使用额外窗口,而是在当前窗口边框直接绘制。bin/Res目录下有shadowdemo.xml可以看。
详细说明:
1).需要layeredimage属性支持,即需要启用分层窗口(异形窗口)。
2).通过shadowsize来控制阴影的宽度,暂时没有做四边阴影分开设置的处理,四边的阴影宽度都是相同的。
3).阴影部分在caption区域也不会响应拖动,如有需要可自行修改源码。
4).窗口的尺寸是包含了阴影区域的。
5).通过shadowcolor来设置阴影渐变终止色。即阴影是从0x00000000渐变到shadowcolor的值,具体代码可以查看paintshadow函数。
6).通过shadowfocusscales来设置窗口阴影渐变效果缩放。0-1之间,值越大,阴影颜色越深。当为默认值-1时,将自动计算合适的值(计算方法:(100-shadowsize)/100,结果小于0时取0,大于1时取1)。
7).因为有些窗口原先不是分层窗口,上面的文字,border等都是gdi绘制,其像素没有alpha通道,启用分层窗口后会变透明,鼠标也会穿透。为了便于使用阴影窗口,引入了nolayeredpadding属性。
8)通过nolayeredpadding来设置非分层区域的外边距。意思是,窗口大小减去外边距之后的矩形区域,其像素将被强制修复alpha为255。这样就避免透明和鼠标穿透了。
The MIT License (MIT) Copyright (c) 2013 duilib Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

【此项目由(https://github.com/juhuaguai/duilib)而来,一般更新都在github,不定时会同步到这里。】:由官方的duilib( https://github.com/duilib/duilib ) 复制过来的,仅为了个人学习使用。可以使用vs2008打开,新增一些学习测试用的demo,代码也会同步官方的后续修改。 展开 收起
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C++
1
https://gitee.com/juhuaguai_net/duilib.git
git@gitee.com:juhuaguai_net/duilib.git
juhuaguai_net
duilib
duilib
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891