1
在Windows窗体和C#中,我使用WS_EX_LAYERED样式的表单,并调用UpdateLayeredWindow将背景设置为透明/ alpha混合的图像:分层窗口,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);
在图像透明的窗体区域,窗体不会收到鼠标事件。他们去窗体下的窗口。
是否有窗口样式或选项可以设置为使窗体在其整个表面上接收鼠标事件(鼠标移动,鼠标向下等)?
我没有设置WS_EX_TRANSPARENT风格摆在首位。无论如何,我试图删除它,但它不起作用。透明区域上的鼠标事件仍然通过。 (要检查,我也尝试设置它,设置时,所有鼠标事件都会通过,即使在非透明区域也是如此。) – Jamrelian
@Jamrelian你可以欺骗并设置透明区域为alpha值1(255)。我想知道这是否基本上是明确的,但不会下降 – Alan
不幸的是,我不控制图像与设置为背景的alpha混合,用户选择它。这意味着我应该以编程方式检查并更改任何加载图像中每个像素的Alpha值。听起来像很多性能问题... – Jamrelian