精易论坛

标题: 自绘窗口阴影2.0 支持Direct2D硬件加速 [打印本页]

作者: a2002    时间: 2021-12-29 17:53
标题: 自绘窗口阴影2.0 支持Direct2D硬件加速
窗口阴影模块2.0 by a2002上个版本: https://125.confly.eu.org/forum.php?mod=viewthread&tid=14712177



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


[2.0]优化了软件计算高斯模糊的速度, 采用缓存机制
[2.0]加入了Direct2D硬件加速, 当然在你的设备不支持Direct2D时GDI仍可用


可以参考exdui4.1的源码, 把绘画函数封装起来, 通过一个标识决定用gdi+还是D2D


这是个好主意, 然后它来了, 写了两天捏~
主要是D2D错误处理太复杂了, 尤其是那个设备丢失(移除?)的错误
但最终还是写出来啦, 流程大概如下:



你可能感觉是否开启硬件加速对阴影外观来说没有什么区别, 这是因为erf函数模拟的效果好
这二者的区别主要在速度方面, 把阴影半径调至最大, 然后最大化窗口或者频繁调整窗口大小, 可以明显地看出区别

源码及例子:
shadow.zip (31.04 KB, 下载次数: 388)



作者: a2002    时间: 2021-12-29 18:05
@福仔 @maozaiba
你们要的硬件加速来辣
作者: 特别nb    时间: 2021-12-29 18:15
感谢楼主分享!
作者: sd3970566    时间: 2021-12-29 19:29
这才是真正的窗口阴影啊。比邓学斌那种再创建个阴影窗口 实时跟随的正统多了。、就是不知道稳定性怎么样···
作者: Tacituenknight    时间: 2021-12-29 19:40
好东西 顶
作者: a2002    时间: 2021-12-29 19:56
sd3970566 发表于 2021-12-29 19:29
这才是真正的窗口阴影啊。比邓学斌那种再创建个阴影窗口 实时跟随的正统多了。、就是不知道稳定性怎么样· ...

虽然但是, 这个也是再创建窗口, 要不然很难实现鼠标穿透
作者: maozaiba    时间: 2021-12-29 20:03
目前测试下来唯一的问题,当 可视=假 时启动后不显示窗口但会显示阴影,正常来说应该不显示,如图:



看看能不能优化下

作者: sd3970566    时间: 2021-12-29 20:03
a2002 发表于 2021-12-29 19:56
虽然但是, 这个也是再创建窗口, 要不然很难实现鼠标穿透

TXQQ的登陆窗口怎么实现的。 逍遥模拟器安装界面也是 就单个窗口就实现了阴影
作者: a2002    时间: 2021-12-29 20:06
maozaiba 发表于 2021-12-29 20:03
目前测试下来唯一的问题,当 可视=假 时启动后不显示窗口但会显示阴影,正常来说应该不显示,如图:

嗯确实, 这个竟然给忘了
作者: a2002    时间: 2021-12-29 20:15
sd3970566 发表于 2021-12-29 20:03
TXQQ的登陆窗口怎么实现的。 逍遥模拟器安装界面也是 就单个窗口就实现了阴影 ...

那个确实是一个窗口实现的, 可前提是你的所有组件都得自绘, 要不然WS_EX_LAYERED更新窗口以后所有控件都显示不出来了(因为窗口压根不响应WM_PAINT). 另外, QQ的阴影不支持鼠标穿透.
作者: 咸鱼666    时间: 2021-12-29 20:15
a2002 发表于 2021-12-29 20:15
那个确实是一个窗口实现的, 可前提是你的所有组件都得自绘, 要不然WS_EX_LAYERED更新窗口以后所有控件都 ...

        能否加个控制圆角度的参数
作者: a2002    时间: 2021-12-29 20:20
咸鱼666 发表于 2021-12-29 20:15
能否加个控制圆角度的参数

嗯我试试
作者: 18074941457    时间: 2021-12-29 23:13
支持开源~!感谢分享
作者: kiss0459    时间: 2021-12-29 23:47
效果杠杠滴,谢谢分享
作者: 大师兄是反派    时间: 2021-12-30 01:02
谢谢大佬分享 支持支持
作者: a2002    时间: 2021-12-30 01:06
2.1 版本更新

修复了隐藏窗口阴影仍显示的bug
增加阴影对异形窗口的支持

shadow.e (77.24 KB, 下载次数: 33)

@maozaiba @咸鱼666 这波绝对稳
作者: qq2518    时间: 2021-12-30 01:48
感谢分享。学习一下
作者: wmv520    时间: 2021-12-30 02:48
支持开源~!感谢分享
作者: 你送的花开了    时间: 2021-12-30 05:24
支持开源~!感谢分享
作者: kmskik    时间: 2021-12-30 07:30
感谢楼主的无私分享,谢谢!
作者: FBI追风大大    时间: 2021-12-30 07:42
        感谢发布原创作品,精易因你更精彩!
作者: orjg    时间: 2021-12-30 08:28
效果不错,谢谢分享
作者: 咸鱼666    时间: 2021-12-30 10:24
a2002 发表于 2021-12-30 01:06
2.1 版本更新

修复了隐藏窗口阴影仍显示的bug

感谢,试了下,易版本的支持圆角了,exui那种圆角皮肤能支持么
作者: a2002    时间: 2021-12-30 11:20
咸鱼666 发表于 2021-12-30 10:24
感谢,试了下,易版本的支持圆角了,exui那种圆角皮肤能支持么

呃皮肤就算了,这个只是画阴影的
ui打算暑假的时候系统地做一个(flag立的飞起)
作者: 咸鱼666    时间: 2021-12-30 12:47
a2002 发表于 2021-12-30 11:20
呃皮肤就算了,这个只是画阴影的
ui打算暑假的时候系统地做一个(flag立的飞起) ...

这个画的时候传递一个圆角度就能用了……能弄个阴影_置圆角度么
作者: a2002    时间: 2021-12-30 13:08
咸鱼666 发表于 2021-12-30 12:47
这个画的时候传递一个圆角度就能用了……能弄个阴影_置圆角度么

圆角已经不是阴影的范畴了呀, 这个加上去比较杂糅
模块只是在窗口异形情况下能正确处理阴影(不会出现空穴), 真正怎么去实现异形还得交给专门的模块来实现
比如有些不一定要的圆角而是超椭圆(小米logo警告), 或者八角窗口
要不你自己用SetWindowRgn做一个实现圆角的模块也成
作者: 刘思尧    时间: 2021-12-31 02:33
感谢分享
作者: kyo9766    时间: 2021-12-31 14:42
这么几天就学会了 Direct2D 真是可喜可贺... 感谢分享
作者: a3930426    时间: 2022-1-1 10:10
效果不错,谢谢分享
作者: fengyishen    时间: 2022-1-3 01:59
效果不错,强啊!~
作者: 布鲁惠斯    时间: 2022-1-3 13:33
支持开源~!感谢分享
作者: 万里晴空    时间: 2022-1-3 14:53
Windows10专业版Build 17763.rs5_release.180914-1434
卡在了这一句,运行不起来
如果真 (_call (G.pfnD3D11CreateDevice, 0, #D3D_DRIVER_TYPE_HARDWARE, 0, #D3D11_CREATE_DEVICE_BGRA_SUPPORT, 0, 0, #D3D11_SDK_VERSION, __p (d3ddev), 0, 0) ≥ 0)

补充内容 (2022-1-4 20:00):
已解决,我本人的问题!!!
作者: 小伟家园    时间: 2022-1-3 19:50
进来看看进来看看
作者: lm88818    时间: 2022-1-4 00:37
支持开源~!感谢分享
作者: 田兵    时间: 2022-1-4 09:29
666666666666666
作者: a2002    时间: 2022-1-4 10:31
万里晴空 发表于 2022-1-3 14:53
Windows10专业版Build 17763.rs5_release.180914-1434
卡在了这一句,运行不起来

唔,我汇编写错了?这个点不应该卡住啊。有什么更详细的信息吗?我这边win10虚拟机测试是正常的
作者: qq420345437    时间: 2022-1-4 16:42
        新技能已get√
作者: qq420345437    时间: 2022-1-4 16:45
        新技能已get√
作者: 万里晴空    时间: 2022-1-4 20:02
a2002 发表于 2022-1-4 10:31
唔,我汇编写错了?这个点不应该卡住啊。有什么更详细的信息吗?我这边win10虚拟机测试是正常的 ...

谢谢!是我自己这的问题
源码完美运行!!!
作者: 万里晴空    时间: 2022-1-4 23:13
再反应个小细节BUG,移动或改变宿主窗口大小的时候,宿主窗口会失去激活
原因是_shadow_reset和_shadow_move调用的SetWindowPos的uFlags参数需要加上SWP_NOACTIVATE(不激活窗口)标志


作者: baochengyue    时间: 2022-1-5 00:46
666666666666666
作者: a2002    时间: 2022-1-5 14:44
2.2 版本更新

修复了移动窗口失去激活的bug
调整了一些重画操作的顺序

shadow.zip (33.86 KB, 下载次数: 149)

2.1 链接
作者: 门童    时间: 2022-1-5 18:37
想要皮肤~
作者: 失踪的男朋友    时间: 2022-1-6 09:17

作者: xjshuaishuai    时间: 2022-1-7 10:13
谢谢分享!
作者: kolins007    时间: 2022-1-8 23:20
很牛的自绘窗口
作者: huoshanlangzhe    时间: 2022-1-13 16:08
看起来很牛的样子
作者: 莱美影像    时间: 2022-1-17 16:49
好东西呀,谢谢分享哦
作者: french007    时间: 2022-1-18 16:53
非常好用!
作者: dxc324    时间: 2022-1-21 23:47
运行不了   不能用呢??
作者: 红色恋曲    时间: 2022-1-22 00:27
666666666666666666666
作者: wh1234567    时间: 2022-2-15 01:36
是不是用了背景图片?能不能分享一下这个背景图片?
作者: a2002    时间: 2022-2-15 10:13
wh1234567 发表于 2022-2-15 01:36
是不是用了背景图片?能不能分享一下这个背景图片?

并不是, 这个是算出来的
但是可以帮你动态生成一个 out.zip (2.15 KB, 下载次数: 3)

有用的话记得点个赞


作者: wh1234567    时间: 2022-2-15 11:09
a2002 发表于 2022-2-15 10:13
并不是, 这个是算出来的
但是可以帮你动态生成一个

导入后效果和你那个不一样,你那个是带有荧光点点,感觉很漂亮,
作者: wh1234567    时间: 2022-2-15 11:14
a2002 发表于 2022-2-15 10:13
并不是, 这个是算出来的
但是可以帮你动态生成一个

你能不能先把组件全部删除,把窗口放最大化,把四边阴影去掉,这样就能把你这个类似图片的窗口网状效果截图一张图了,然后穿上来我测试看能不能用,你源码在我电脑上运行也没有你这么好看的界面效果,
作者: wh1234567    时间: 2022-2-15 11:20
a2002 发表于 2022-2-15 10:13
并不是, 这个是算出来的
但是可以帮你动态生成一个

效果不一样
作者: a2002    时间: 2022-2-15 15:23
wh1234567 发表于 2022-2-15 11:20
效果不一样

hhhhhhhhhh这个是gif的画质的问题吧就是录屏的时候gif动图只有256种颜色, 然后只能靠掺杂颜色的方式保证图像不失真
其实我电脑运行出来和你一样没有网点的



不过这个效果也不是不能做, 你运行下这个python脚本就有了, 你看看压缩包里那个图片是不是你要的那个效果
hhh.zip (729 Bytes, 下载次数: 3)
你要改图片大小就自己改一下脚本吧
或者直接用的话记得填充方式选平铺而不是拉伸

作者: wh1234567    时间: 2022-2-15 15:47
a2002 发表于 2022-2-15 15:23
hhhhhhhhhh这个是gif的画质的问题吧就是录屏的时候gif动图只有256种颜色, 然后只能靠掺杂颜色的方式保证 ...

感谢老师帮助,稍微有点网状的意思,但不明细,感觉和默认背景颜色没太大区别,但是如果缩略图的话就能明显放大网格了,网格太大也不好看,干扰窗口其他组件里的内容字体,只有稍微有点细微亮点的小网格点点才显得好看,感谢老师
作者: wh1234567    时间: 2022-2-15 15:57
a2002 发表于 2022-2-15 15:23
hhhhhhhhhh这个是gif的画质的问题吧就是录屏的时候gif动图只有256种颜色, 然后只能靠掺杂颜色的方式保证 ...

你按我之前说的,先把组件全部删除后,运行放大窗口后,全屏截图这个窗口,这样就能把你这个窗口里的效果图片截图出来了,要不然小图片缩略后,那个网格太大不够细腻,影响字体直观
作者: a2002    时间: 2022-2-15 16:13
wh1234567 发表于 2022-2-15 15:57
你按我之前说的,先把组件全部删除后,运行放大窗口后,全屏截图这个窗口,这样就能把你这个窗口里的效果 ...

20220215-1607.zip (904 Bytes, 下载次数: 10)
作者: wh1234567    时间: 2022-2-15 20:03
a2002 发表于 2022-2-15 16:13

效果还是不一样,不过很感谢您帮忙了,谢谢你了
作者: liaoxiaohu    时间: 2022-2-16 14:39
6666666666666666
作者: Goto1    时间: 2022-2-24 17:41
支持开源~!感谢分享
作者: 926413040    时间: 2022-3-22 10:21
支持开源~!感谢分享
作者: zifeiyu    时间: 2022-4-1 17:07
666666666666666
作者: ghost12    时间: 2022-4-5 17:01
很赞同,谢谢!
作者: 231阿三    时间: 2022-4-11 23:53
66666666666666666666666
作者: 纯真小白    时间: 2022-4-15 09:20
可以可以
作者: Linss    时间: 2022-4-21 11:20
谢谢分享厉害了
作者: a4180237    时间: 2022-4-30 22:32
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
作者: 飞宇    时间: 2022-5-5 10:52
学习学习
作者: 爱在天涯    时间: 2022-5-9 10:11
我服了,难道不应该是  窗口_置阴影(_启动窗口.取窗口句柄())  就结束了吗?  你这是:阴影_初始化()、阴影_创建()、阴影_通知(参数1、参数2、参数3、参数4、参数5、参数6、参数7)
作者: E小生    时间: 2022-5-12 21:45
修复了移动窗口失去激活的bug
作者: 白琥a    时间: 2022-5-14 22:36
支持支持
作者: 源码免杀?水准    时间: 2022-5-21 07:09

很赞同,谢谢!
作者: juedui    时间: 2022-5-21 22:21
感谢分享
作者: 4444b6666    时间: 2022-5-22 15:23
支持开源~!感谢分享
作者: azrxgt    时间: 2022-6-9 01:21
看起来还行噢
作者: daxuan2620    时间: 2022-6-9 09:31
3333333333333333
作者: 按键精灵    时间: 2022-6-12 22:05
研究研究
作者: Q2632167561    时间: 2022-7-28 20:24
支持开源~!感谢分享
作者: 九社长    时间: 2022-8-27 01:11
1321465687678678
作者: herryang    时间: 2022-11-18 23:53
2.2可以明显地看出区别
作者: 浩仔    时间: 2022-12-25 21:25
66666666666666666
作者: 浩仔    时间: 2022-12-25 21:25
6666666666666666666666666
作者: 红色恋曲    时间: 2023-3-1 23:06
学习一下
作者: 小文集团    时间: 2023-6-20 19:19
111111111111111111111111111111111
作者: 青春谁不疯狂    时间: 2023-9-1 04:27
感谢分享
作者: wangdili19822    时间: 2023-10-16 07:09
感谢分享!
作者: qazx123zxcf    时间: 2023-10-20 22:57
支持开源~!感谢分享
作者: qq1695283376    时间: 2023-11-5 19:27
6666666666666666666666
作者: macdom    时间: 2023-11-15 22:40
感谢分享!!!
作者: azrxgt    时间: 2023-11-16 19:02
线程内无法创建阴影 有办法吗
作者: qinrui    时间: 2024-3-25 16:01
66666666666666666666666666666
作者: 1486262242    时间: 2024-3-28 00:06
感谢分享
作者: 在看风云    时间: 2024-12-21 18:18
7777777777777777
作者: 在看风云    时间: 2024-12-21 18:43
77777777777777777
作者: 在看风云    时间: 2024-12-23 19:38
6666666666666
作者: chenyananhao    时间: 2025-1-11 23:50
        支持开源~!感谢分享  膜拜大佬们
作者: tsinghon    时间: 2025-2-28 09:50

感谢分享!




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