我有一个透明窗口(使用WS_EX_LAYERED创建),我想接收零alpha区域的鼠标事件。
据我所知,我可以:
1)使用鼠标钩
2)用几乎完全透明的颜色(不透明度为1)绘制背景
然而,第一个解决方案耗费时间,第二个解决方案会减慢渲染时间,因为我的窗口几乎遍布桌面,大部分像素目前都是完全透明的。
是否有其他方式接收这些鼠标事件?
答案 0 :(得分:1)
根据MSDN:
分层窗口的命中测试是 基于形状和透明度 窗户。这意味着该领域 的颜色键或窗口的颜色 其alpha值为零将让 鼠标消息通过。但是,如果 分层窗口有 WS_EX_TRANSPARENT扩展窗口 风格,分层窗口的形状 将被忽略和鼠标事件 将被传递到其他窗口 在分层窗口下面。
然而,在一个新线程中,您可以使用GetCursorPos
连续获得鼠标的坐标,如果位置在您的一个图标内(无论是,它是在图标内的零alpha像素上),您可以处理它。不比钩子好多了