鼠标穿透对任务栏窗口也生效#2149
Conversation
|
这么改D2D渲染模式也不会生效,还需要考虑D2D渲染的场景 |
|
@zhongyang219 @BombaxCeiba 我让 claude code 改了一版,你们看行吗 实现摘要共修改了 20 个文件: 核心逻辑变更
设置界面变更
|
D2D的实现比较特殊,需要让背景纹理透明而不是不透明。最开始我是实现成透明的,然后有了穿透效果,但是在评论里面被当成bug了,所以我改回去了。你只需要找到d2d渲染那边初始化纹理alpha为1的逻辑,按照你的设置动态把值变化设为0或1就行。 |
修改了 |
使用NC_HITTEST实现原理上说得通,如果本地测试没问题应该是可以的 |
|
开发者只需要维护简体中文、英文、繁体中文三种语言,其他语言由对应翻译者维护,不要改动它。另外,新增的选项是放在“任务栏窗口设置”中的可以直接复用TXT_MOUSE_PENETRATE_CHECK这个字符串,没必要增加一个新的。 |
OK |
|
鼠标穿透的效果应该是右击时弹出任务栏本身的右键菜单,而不是TrafficMonitor的右键,但是我这边试了一下,使用Gdi渲染的情况下,勾选任务栏鼠标穿透后,右键点击时没有任何反应,不会弹出任务栏本身的右键菜单。你那边是正常的吗? |
代码改了下,现在正常了😂。我确实不懂这块,我试了 GDI/D2D 实测正常,下边是 claude 说的: 新实现:改用 WS_EX_LAYERED | WS_EX_TRANSPARENT 组合(与主窗口穿透同款机制),系统在命中测试阶段直接跳过本窗口,跨进程有效,且与 GDI/D2D 渲染模式无关。GDI 不透明模式下窗口原本无分层样式,会补上 WS_EX_LAYERED 并设 LWA_ALPHA=255 保持正常显示。 关于 D2D 背景 alpha 动态 0/1 的建议:这次还原成了上游固定 alpha=1。因为新机制对整个窗口生效,不再需要靠 alpha=0 打洞;另外 alpha=0 方案只有背景像素能穿透,点在文字像素上仍会命中窗口再被 HTTRANSPARENT 吞掉。 D2D1_WITH_DCOMPOSITION 路径下窗口带 WS_EX_NOREDIRECTIONBITMAP 且原本无分层样式,开启穿透后会给它补 WS_EX_LAYERED(代码注释引用的微软示例说明两者可共存)。 |

#2117
#1711