天天看点

duilib 使用图片素材或者算法给窗体增加阴影(源码和demo)

         之前我写的程序使用阴影时,一直是使用codeproject网站上的WndShadow类,并且把它当作单独的模块来使用,后来觉得使用阴影的情况非常多,所以今天就把这个类改写了一下,让他融入到duilib,并且可以直接使用xml来描述阴影,不需要写任何c++代码。

        以前的WndShadow类是用算法来计算阴影,灵活性很大,但是缺点就是效果不够理想,所以我另外给他附加了使用图片素材来贴阴影的功能。最终的新类名为CShadowUI。这个类可以单独使用,我把他集成到了自己的库里。为了融合到Duilib我修改了UiLib.h文件、UIDlgBuilder.cpp文件、UIManager.h文件、UIManager.cpp文件。

        先贴两张效果图,以下是素材阴影和算法阴影的效果图:

duilib 使用图片素材或者算法给窗体增加阴影(源码和demo)
duilib 使用图片素材或者算法给窗体增加阴影(源码和demo)

        通过设置xml的Window标签可以添加阴影,阴影的xml属性描述如下:

        前面的两个效果图的对应xml描述如下:

源码:

       UIShadow.h源码为:

       UIShadow.cpp源码为:

总结:

      这个阴影使用双层窗体实现的,可以避免duilib在半透明窗体上的不足。但也由于使用双层窗体,导致窗体大小快速改变时会看出阴影改变的延迟 ,能不能接受这个延迟就看个人了,所以如果是固定大小的窗体使用阴影效果最好。具体的效果可以看我的demo。

继续阅读