【问题标题】:WS_EX_TRANSPARENT and stylus eventsWS_EX_TRANSPARENT 和触控笔事件
【发布时间】:2015-07-20 13:42:51
【问题描述】:

我正在使用以下代码在窗口中设置 WS_EX_TRANSPARENT 标志:

SetWindowLong( hwnd, GWL_EXSTYLE,WS_EX_TRANSPARENT | WS_EX_COMPOSITED | WS_EX_LAYERED );

此标志使鼠标事件转到 Windows 系统而不是我的应用程序。 当我设置这个时,我无法在 hwnd 窗口中获取 Stylus 事件。有什么办法可以解决或者那是不可能的?

【问题讨论】:

  • WM_TOUCH???那不是风格标志。启用触摸需要调用 RegisterTouchWindow()。
  • 好的。没有这个的行为相同。问题已编辑。

标签: c++ winapi window


【解决方案1】:

记录了Layered WindowsWS_EX_TRANSPARENT 扩展窗口样式的行为:

[I]如果分层窗口具有WS_EX_TRANSPARENT扩展窗口样式,分层窗口的形状将被忽略,鼠标事件将传递给分层窗口下的其他窗口。

注意:输入处理的规则通常是相同的,适用于所有指针设备。每当您阅读“鼠标事件”您可以将其扩展为“来自定点设备的输入事件”

WS_EX_TRANSPARENT 的文档中提供了一种解决方法:

要在没有这些限制的情况下实现透明度,请使用SetWindowRgn 函数。

【讨论】:

  • 我需要应用程序的整个窗口,而不仅仅是其中的一个区域。另外,我需要将鼠标事件传递给其他窗口,并且只获取手写笔事件。
  • 关于您的编辑:我可以使用 MouseHook 获取 WS_EX_TRANSPARENT 窗口中的鼠标事件,但不能使用 Stylus 事件。
  • @juangrdiazrestu:正如我在回答中指出的那样,所有指针设备的输入都是相同的。如果您希望有不同的行为,则必须自己实现过滤。我也有点相信,您正在使用WS_EX_TRANSPARENT 来做一些不该做的事情。请务必阅读Like the cake, WS_EX_TRANSPARENT is a lie, or at least not the entire truth
  • 我无法过滤无法获取的事件,因此这不是解决方案。关于第二个,我想我对winapi中的WS_EX_TRANSPARENT这个概念已经很清楚了。
  • @juangrdiazrestu:无意冒犯,但有人通过WM_TOUCH 获得扩展窗口style 可能不是具有直接基础的人。我建议您阅读我发布的链接。
猜你喜欢
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 2020-02-25
  • 2010-09-24
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
  • 2011-03-16
相关资源
最近更新 更多