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

时间:2011-05-18 18:22:38

标签: c++ windows graphics gdi

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

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

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

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

1 个答案:

答案 0 :(得分:1)

根据MSDN:

  

分层窗口的命中测试是   基于形状和透明度   窗户。这意味着该领域   的颜色键或窗口的颜色   其alpha值为零将让   鼠标消息通过。但是,如果   分层窗口有   WS_EX_TRANSPARENT扩展窗口   风格,分层窗口的形状   将被忽略和鼠标事件   将被传递到其他窗口   在分层窗口下面。

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