1

在 Windows 窗体和 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);

在图像透明的窗体区域上,窗体不接收鼠标事件。他们转到表格下方的窗口。

是否可以设置窗口样式或选项以使表单能够在其整个表面上接收鼠标事件(鼠标移动、鼠标按下等)?

4

1 回答 1

1

分层窗口

命中测试

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

我会尝试重新调整 WS_EX_TRANSPARENT 风格

于 2012-12-14T18:52:31.860 回答