在 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 样式应用于现有表单而不会产生这种奇怪的副作用?