在创建后在WinForms表单中设置CS_DROPSHADOW会导致其他表单出现双重阴影

时间:2018-08-17 15:07:45

标签: forms winforms shadow setclasslong

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中导致严重的问题。以这种方式启用阴影后创建的所有窗体都具有寄生双阴影:

enter image description here

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

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

是否有另一种方法可以将CS_DROPSHADOW样式应用于现有表单而没有这种怪异的副作用?

0 个答案:

没有答案