我有一个使用Microsoft的分层窗口在Windows 7上运行的应用程序http://msdn.microsoft.com/en-us/library/ms997507.aspx.此应用程序设置为具有30%的不透明度,它始终位于顶部,并且对事件是透明的(即:它将所有事件转发到其下的窗口).您可以将其视为您正在通过桌面查看的"屏幕".它目前被用作我们用户无所不在的反馈层.
我们尝试在Windows 8上运行相同的应用程序,并注意它在桌面模式下按预期工作,但没有任何内容覆盖开始菜单和其他metro应用程序.
有没有人知道是否有一个等效的总体顶部窗口模式适用于城域应用程序和Windows 8中的开始菜单?
在我的项目中,我创建一个具有用户控制的不透明度的表单。如果表单是完全透明的,则鼠标事件会“消失”(无需我干预),否则我的表单会处理它们。
阅读此问题并覆盖CreateParams属性以WS_EX_TRANSPARENT在窗体上设置标志后,当不透明度为任何<255的值时,它现在允许滑入鼠标事件。
这正是我想要的,但令我担心的是,我不明白它为什么起作用。
根据我的阅读,WS_EX_TRANSPARENT旨在通过在其Paint方法中从其下方的表单中“窃取位”来使该表单显得透明。
我的窗体的Paint方法及其中的所有控件都不应调用,对吗?由于WS_EX_TRANSPARENT应该导致Windows覆盖它们,所以为什么它会影响输入处理而不影响表单的绘制?
不透明度应该对鼠标事件的处理没有影响,就好像Paint被覆盖一样,“局部”不透明度应该没关系,不是吗?
可能有人解释,这是什么标志真的呢?它是如何工作的?