2012年我在this thread中写道,我们需要根据某些条件打开/关闭可重用表单的系统阴影效果。该代码的核心部分如下所示:
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样式应用于现有表单而没有这种怪异的副作用?