分层窗口,UpdateLayeredWindow,alpha混合和鼠标事件

时间:2012-12-14 18:47:04

标签: c# .net winforms alphablending layered-windows

在Windows Forms和C#中,我使用的是具有WS_EX_LAYERED样式的表单,并调用 UpdateLayeredWindow 将背景设置为透明/ alpha混合的图像:

NativeMethods.BLENDFUNCTION blend = new NativeMethods.BLENDFUNCTION();
blend.BlendOp = NativeMethods.AC_SRC_OVER;
blend.BlendFlags = 0;
blend.SourceConstantAlpha = 255;
blend.AlphaFormat = NativeMethods.AC_SRC_ALPHA;

NativeMethods.UpdateLayeredWindow(form.Handle, screenDc, ref topPos, ref size, 
    memDc, ref pointSource, 0, ref blend, NativeMethods.ULW_ALPHA);

在图像透明的表单区域中,表单不接收鼠标事件。他们去了窗体下面的窗口。

是否有窗口样式或选项可以设置为使窗体能够在整个表面上接收鼠标事件(鼠标移动,鼠标移动等)?

1 个答案:

答案 0 :(得分:1)

来自Layered Windows

命中测试

分层窗口的命中测试基于窗口的形状和透明度。这意味着窗口中的颜色键区域或其alpha值为零的区域将允许鼠标消息通过。 如果分层窗口具有WS_EX_TRANSPARENT扩展窗口样式,则将忽略分层窗口的形状,并将鼠标事件传递到分层窗口下的其他窗口。

我会试着去讨论WS_EX_TRANSPARENT样式