如何截获透明窗口的鼠标事件
How to intercept mouse events of a transparent window?
我有一个透明窗口(用WS_EX_LAYERED创建),我想接收零alpha区域的鼠标事件。
据我所知,我可以:
1) 使用鼠标钩
2) 用几乎完全透明的颜色(不透明度为 1)绘制背景
但是,第一种解决方案非常耗时,第二种解决方案会减慢我的渲染时间,因为我的窗口几乎在整个桌面上都被拉伸,并且目前大多数像素都是完全透明的。
有没有另一种接收这些鼠标事件的方法?
根据MSDN:
分层窗口的命中测试是 基于形状和透明度 窗口。这意味着这些区域 颜色键控的窗口或 其 alpha 值为零将允许 鼠标消息通过。但是,如果 分层窗口具有 WS_EX_TRANSPARENT扩展窗口 样式,分层窗口的形状 将被忽略,鼠标事件 将传递到其他窗口 在分层窗口下方。
但是,在新线程中,您可以使用GetCursorPos
连续获取鼠标的坐标,如果位置位于其中一个图标内(无论如何,它超过图标内的零 alpha 像素),则您处理它。不比钩子好多少
相关文章:
- 跟踪滚动条上的鼠标事件
- Qt-如何在Qt3DWindow上获取鼠标事件
- Qt:如何防止为平板电脑事件生成鼠标事件
- 如何使用 c++ mfc 在屏幕上获取鼠标事件
- WM_PAINT和鼠标事件.MFC/WIN32 API.
- 通过鼠标事件传递数据
- 鼠标区域窃取QQuickItem的鼠标事件
- Windows Console API鼠标事件只是进入选择模式
- 无法跟踪鼠标事件 OpenCV
- Qt. 忽略小部件中的任何鼠标事件,而不是另一个小部件
- WXWIDGETS将鼠标事件连接到WXPAINTDC上的形状对象以删除
- Qt/Qml - 触发 QApplication/QQmlApplicationEngine 事件(键和鼠标事件)
- Juce 鼠标事件不起作用
- 是否可以捕获全局鼠标事件
- 单击QCHART图的轴时捕获鼠标事件
- OpenCV 鼠标事件始终在鼠标滚动时接收事件 10 和 *flag* 0
- 鼠标事件选取器打开场景图
- 将鼠标事件发送到虚拟现实OpenGL场景中的QtQuick窗口
- 处理鼠标事件SFML
- 是否可以在 wxFrame 中捕获鼠标事件