WS_EX_TRANSPARENT-它实际上是做什么的?

seb*_*ebf 3 c# forms winapi flags winforms

在我的项目中,我创建一个具有用户控制的不透明度的表单。如果表单是完全透明的,则鼠标事件会“消失”(无需我干预),否则我的表单会处理它们。

阅读此问题并覆盖CreateParams属性以WS_EX_TRANSPARENT在窗体上设置标志后,当不透明度为任何<255的值时,它现在允许滑入鼠标事件。

这正是我想要的,但令我担心的是,我不明白它为什么起作用。

根据我的阅读,WS_EX_TRANSPARENT旨在通过在其Paint方法中从其下方的表单中“窃取位”来使该表单显得透明。

  1. 我的窗体的Paint方法及其中的所有控件都不应调用,对吗?由于WS_EX_TRANSPARENT应该导致Windows覆盖它们,所以为什么它会影响输入处理而不影响表单的绘制?

  2. 不透明度应该对鼠标事件的处理没有影响,就好像Paint被覆盖一样,“局部”不透明度应该没关系,不是吗?

可能有人解释,这是什么标志真的呢?它是如何工作的?

Bor*_* B. 5

WS_EX_TRANSPARENT可以使您的事件(例如单击鼠标)贯穿整个窗口。不透明度是一个单独的概念,它指示窗口管理器在绘制表单时应用alphablending。这两件事无关紧要,但是当您将它们结合在一起时,您将获得所需的效果。

所以:

  1. 窗体的Paint方法通常会正常调用,不透明度与此无关。

  2. 透明度没有什么可以做的鼠标事件,在第一段描述。