精易论坛

标题: 自绘窗口阴影, 这应该是最自然的一种阴影了 [打印本页]

作者: a2002    时间: 2021-12-27 18:35
标题: 自绘窗口阴影, 这应该是最自然的一种阴影了
苦学c/c++和win32, 成功上岸!!!
窗口阴影模块 by a2002
这个模块用于给无边框窗口加上阴影
提供给学习自绘的朋友╰(*°▽°*)╯




思路
把原始窗口阴影想象成单色的矩形
这个矩形经过高斯模糊处理后, 加上偏移即形成阴影
实际上绘制时与原窗口重叠的部分应该不计算, 这样的话效率还可以



模块没有用到GDIPlus, 只是创建了一个32位的位图
实际上也可以用Direct2D硬件加速计算高斯模糊效果
但考虑到不是所有系统(比如XP, 早期WIN7, Windows安全模式)都支持d2d1_1, 只好作罢
其实是不会Direct2D(

用法
在程序创建阴影之前调用 阴影_初始化, 指定阴影类名和实例句柄, 一般填 #DEFAULTSHADOWNAME 和 0 即可
在程序销毁阴影之后调用 阴影_反初始化, 释放资源是个好习惯
如果要使用阴影, 有两种方案
一种是使用 阴影_通知, 自行发送消息创建/销毁/更新窗口, 例子见测试窗口程序集
另一种使用 阴影_创建/阴影_销毁/阴影_更新 这3个函数, 例子见测试窗口2程序集



shadow.zip (14.66 KB, 下载次数: 207)


作者: 伟的太大了    时间: 2021-12-27 19:45
感谢分享~
作者: 牛大马    时间: 2021-12-27 19:54
6666666666666666666666666
作者: happyweeks365    时间: 2021-12-27 20:08
6666666666666666666
作者: maozaiba    时间: 2021-12-27 21:15
试了下,感觉还稍有点复杂,是否可再精简只用一条命令即可加载阴影并自动跟随窗口变化而变化
作者: a2002    时间: 2021-12-27 22:03
本帖最后由 a2002 于 2021-12-27 22:58 编辑

修复了一个小bug

shadow.e (51.57 KB, 下载次数: 49)

一个典型的例子

demo.e (4.86 KB, 下载次数: 33)

补充内容 (2021-12-29 18:04):
https://125.confly.eu.org/thread-14712431-1-1.html
@福仔 @maozaiba 你们要的硬件加速来辣
作者: 福仔    时间: 2021-12-27 22:11
可以参考exdui4.1的源码, 把绘画函数封装起来, 通过一个标识决定用gdi+还是D2D
我个人感觉这种模式很好, 绘画函数最常用的也就那100来个(包括各种对象的创建销毁和其他)
封装的时候麻烦一点, 但是封装好之后, 可以一键切换使用哪个库来渲染....
作者: 我很低调    时间: 2021-12-27 22:34
7666666666666666666
作者: a2002    时间: 2021-12-27 22:37
福仔 发表于 2021-12-27 22:11
可以参考exdui4.1的源码, 把绘画函数封装起来, 通过一个标识决定用gdi+还是D2D
我个人感觉这种模式很好, 绘 ...

是的, 之前看他的源码确实挺震撼的, 现在我写易的风格已经向这边靠了 (就是疯狂__get和__set
现在我学了一遍c/c++, 并了解了一点汇编, 也在研究这段代码(翻了很多遍了, 能看懂整个框架), 用c++写过几个d2d程序, 拿硬件渲染的确挺快
我想着可以拿c++去重新实现一下(类似用factory/引用计数的类封装), 这样的话可以取消句柄表, 速度应该更快, 一个理想中的目的是兼容64位和xp(64位不支持脚本组件, 但是有IActiveScriptSite可以拿来用, xml也有对应的com接口)
现在有个c++的重构版本叫ExDUIR, 写的也还不错, 但我现在想达到的目的是兼容xp(因为安全模式不支持d2d)而且改下架构, 同时支持64位, 所以明年暑假想尝试一下.
呃, 纯纯的轮子想法吧, 大佬不喜勿喷
作者: 忧郁之子    时间: 2021-12-28 00:30
看着不错,支持一下
作者: 寡人i    时间: 2021-12-28 01:59

作者: qq2518    时间: 2021-12-28 02:11
学习一下。感谢分享
作者: kyo9766    时间: 2021-12-28 08:15
学习一下原理,感谢分享
作者: wuqingg    时间: 2021-12-28 08:43
shadow模块的作者也是你不?
作者: 草莓小熊    时间: 2021-12-28 09:42
支持开源~!感谢分享
作者: a2002    时间: 2021-12-28 11:26
wuqingg 发表于 2021-12-28 08:43
shadow模块的作者也是你不?

啊,你说的是哪个
作者: 福仔    时间: 2021-12-28 11:45
a2002 发表于 2021-12-27 22:37
是的, 之前看他的源码确实挺震撼的, 现在我写易的风格已经向这边靠了 (就是疯狂__get和__set
现在我学了 ...

按照exdui的写法是能兼容xp啊, 在初始化dx失败的时候就使用gdi+了, xp是支持gdi+的
作者: a2002    时间: 2021-12-28 12:02
福仔 发表于 2021-12-28 11:45
按照exdui的写法是能兼容xp啊, 在初始化dx失败的时候就使用gdi+了, xp是支持gdi+的 ...

知道, 所以重构c++主要目的是改成factory模式+支持64位
作者: 福仔    时间: 2021-12-28 12:20
a2002 发表于 2021-12-28 12:02
知道, 所以重构c++主要目的是改成factory模式+支持64位

那个c++重构的源码也可以看看, 直接抄的话也能省下不少代码....
不能说抄, 得说借鉴
作者: a2002    时间: 2021-12-28 12:34
福仔 发表于 2021-12-28 12:20
那个c++重构的源码也可以看看, 直接抄的话也能省下不少代码....
不能说抄, 得说借鉴 ...

害, 也不是借鉴, 主要是改掉句柄表的话很多代码结构都要变
包括地址加偏移都要改成类成员(因为不打算兼容原有dll接口)
谁知道呢, 暑假, 鸽不鸽还说不定呢
作者: abpyu    时间: 2021-12-28 15:31
我咋用不起来啊  阴影_初始化(#DEFAULTSHADOWNAME, 0)   没效果
作者: maozaiba    时间: 2021-12-28 20:55
能做到和窗口大小同步
但可视状态不同步,虽可以用 阴影_通知 开启/关闭阴影 解决就是麻烦点
另一个主要问题是性能不太好,在最小化和恢复窗口时会比较卡

就这些小问题,总体效果还是挺好的!
作者: 青年呀    时间: 2021-12-29 14:12
感谢分享
作者: 18074941457    时间: 2021-12-29 23:18
支持开源~!感谢分享
作者: 炫彩界面库    时间: 2021-12-30 23:16


作者: 东皇大人    时间: 2022-1-2 17:08
感谢分享
作者: 东皇大人    时间: 2022-1-3 22:56
感谢分享
作者: 趣冉科技    时间: 2022-1-4 11:12
支持开源~!感谢分享
作者: 8554036    时间: 2022-1-12 20:15
效果不错!收下了
作者: 温暖的舌骨    时间: 2022-1-13 01:29
        支持开源~!感谢分享
作者: 蜗牛人生    时间: 2022-1-13 11:43
很好看,不错哦
作者: huoshanlangzhe    时间: 2022-1-13 16:06
666666666666666666
作者: gmq460412232    时间: 2022-1-13 20:49
大佬牛蛙牛蛙
作者: wh1234567    时间: 2022-2-15 01:40
求这个窗口背景图片
作者: 牛大马    时间: 2022-5-8 13:21
6666666666666666
作者: E小生    时间: 2022-5-12 21:45

6666666666666666
作者: houtbin    时间: 2022-7-19 16:08
看一下 啊啊
作者: csyhwcs    时间: 2022-9-1 16:21
66666666666666666666666666666666666666666
作者: csyhwcs    时间: 2022-9-1 16:22
66666666666666666666666666666666666666
作者: hjh2112    时间: 2022-9-3 11:32
很牛呀
作者: walj222    时间: 2022-9-4 11:53
a2002 发表于 2021-12-27 22:03
修复了一个小bug

确实是好东西
作者: walj222    时间: 2022-9-4 11:53
火山PC能转过云吗
作者: 最懵的召唤师    时间: 2022-9-4 12:03
厉害了着实是
作者: ermituofo    时间: 2022-10-15 16:51
好东西。。。。
作者: sclgame    时间: 2023-5-25 20:26
66666666666666666666666
作者: 小叮    时间: 2023-6-4 11:49
支持开源~!感谢分享
作者: 灵弦    时间: 2024-4-5 19:13
支持开源
作者: 是个人    时间: 2024-8-14 15:22
66666666666666666666
作者: 是个人    时间: 2024-8-14 15:22
66666666666666666666666
作者: 41113701    时间: 2024-8-30 19:52
6666666666666666666666




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4