1

在 2012 年,我在这个线程中写道,我们需要根据某些条件打开/关闭可重用表单的系统阴影效果。这段代码的核心部分如下所示:

System.Runtime.InteropServices.HandleRef myHandleRef = new System.Runtime.InteropServices.HandleRef(this, this.Handle);
int myStyle = NativeMethods.GetClassLongPtr(myHandleRef, iGNativeMethods.CS_DROPSHADOW).ToInt32();
if (hasShadow)
    myStyle |= NativeMethods.CS_DROPSHADOW;
else
    myStyle &= ~NativeMethods.CS_DROPSHADOW;
NativeMethods.SetClassLong(myHandleRef, NativeMethods.GCL_STYLE, new IntPtr(myStyle));

不幸的是,这种将 CS_DROPSHADOW 样式应用于窗体的方式会导致 Windows 10 中出现严重问题。以这种方式启用阴影后创建的所有窗体都有寄生双阴影:

在此处输入图像描述

我的意思不是应用了 CS_DROPSHADOW 样式的表单 - 我的意思是我们可以使用如下代码实例化的所有其他表单:

Form myForm = new Form();
myForm.Show();

是否有另一种方法可以将 CS_DROPSHADOW 样式应用于现有表单而不会产生这种奇怪的副作用?

4

0 回答 0