如何截获透明窗口的鼠标事件

How to intercept mouse events of a transparent window?

本文关键字:鼠标 事件 透明窗口 何截获      更新时间:2023-10-16

我有一个透明窗口(用WS_EX_LAYERED创建),我想接收零alpha区域的鼠标事件。
据我所知,我可以:

1) 使用鼠标钩
2) 用几乎完全透明的颜色(不透明度为 1)绘制背景

但是,第一种解决方案非常耗时,第二种解决方案会减慢我的渲染时间,因为我的窗口几乎在整个桌面上都被拉伸,并且目前大多数像素都是完全透明的。

有没有另一种接收这些鼠标事件的方法?

根据MSDN:

分层窗口的命中测试是 基于形状和透明度 窗口。这意味着这些区域 颜色键控的窗口或 其 alpha 值为零将允许 鼠标消息通过。但是,如果 分层窗口具有 WS_EX_TRANSPARENT扩展窗口 样式,分层窗口的形状 将被忽略,鼠标事件 将传递到其他窗口 在分层窗口下方。

但是,在新线程中,您可以使用GetCursorPos连续获取鼠标的坐标,如果位置位于其中一个图标内(无论如何,它超过图标内的零 alpha 像素),则您处理它。不比钩子好多少