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

Ome*_*mer 5 c++ windows graphics gdi

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

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

然而,第一个解决方案是耗时的,第二个解决方案将减慢我的渲染时间,因为我的窗口几乎遍布桌面,大多数像素目前都是完全透明的.

是否有其他方式接收这些鼠标事件?

Fer*_*eak 1

根据 MSDN:

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

然而,在一个新线程中,您可以连续获取鼠标的坐标GetCursorPos,如果该位置位于您的图标之一内(无论如何,它位于图标内的零 alpha 像素之上),您可以处理它。比钩子好不了多少