为什么我的 MDI 子窗体不显示阴影?

Sun*_*nny 2 windows mdi mdichild aero winforms

在我的应用程序中,当我将窗体作为主 MDI 父窗体的子窗体时,子窗体停止在窗体后面显示 Windows 7 默认阴影效果。如何让子窗体阴影显示?

Form obj = Application.OpenForms["My_form"];
if (obj != null)
{
    obj.Focus();
}
else
{
    My_form c = new My_form();
    c.MdiParent = this;
    c.Show();
}
Run Code Online (Sandbox Code Playgroud)

Cod*_*ray 5

这是正常的,完全是设计使然。MDI 子窗口不是顶级窗口,而是一种特殊类型的子窗口,旨在托管在 MDI 父窗口中

桌面窗口管理器 (DWM) 负责 Windows Vista 和 7 中的 Aero 效果,仅向顶级窗口添加投影和玻璃透明度。您的 MDI 儿童窗口不符合此治疗条件。事实上,阴影并不是它们唯一缺少的东西——它们看起来像是使用 Aero Basic 主题绘制的,这在将 Aero 主题用于其他所有内容的机器上在视觉上非常不和谐。

不幸的是,除了完全放弃 MDI 之外,没有其他解决方法。无论如何,多文档界面现在已经几乎被弃用了。此类界面为人们提供了比原先预期更难使用的界面,并且它们几乎完全被废弃,尤其是微软自己的软件。您会注意到 Microsoft Office 没有使用 MDI,而是使用多个顶级窗口。您可能应该考虑用自己的软件做同样的事情。

MDI 的另一个流行替代品是选项卡式界面,通常由 Web 浏览器使用。在这里,您有一个单一的顶级窗口,所有子窗口都显示为该主窗口顶部的“选项卡”。用户可以更容易、更直观地作为选项卡而不是独立的 MDI 子窗口在子窗口之间切换。