2012-07-23 40 views
1

在我的应用程序中,当我将窗体作为主MDI父窗体的子窗体时,子窗体停止在窗体背后显示Windows 7默认阴影效果。我如何获得儿童形式的影子?为什么我的MDI子表单不显示阴影?

Form obj = Application.OpenForms["My_form"]; 
if (obj != null) 
{ 
    obj.Focus(); 
} 
else 
{ 
    My_form c = new My_form(); 
    c.MdiParent = this; 
    c.Show(); 
} 
+0

如果有什么这将是一个操作系统的问题,而不是一个代码问题... – MoonKnight 2012-07-23 10:21:50

+0

我认为这是设计。 MDI子窗口不是顶级窗口(尽管它们尽力让它看起来像一个窗口),而合成管理器仅在顶级窗口周围呈现阴影。 – 2012-07-23 10:27:37

回答

2

我得到了答案最后,如果我做一个形式子窗体像

c.MdiParent =this; 

它使外观形态为平的,如果你喜欢表现形式为默认的Windows类似形式 不要使窗体的mdi父母!

3

这是正常的,完全由设计。 MDI child windows are not top-level windows, but rather a special type of child window that is designed to be hosted in an MDI parent window

桌面窗口管理器(DWM),它负责Windows Vista和7中的Aero效果,仅向顶层窗口添加阴影和玻璃透明度。你的MDI子窗口不符合这种治疗。事实上,影子不是他们唯一缺少的东西 - 它们看起来像是使用Aero Basic主题绘制的,这对于使用Aero主题进行其他操作的机器而言,在视觉上非常刺耳。

不幸的是,除此之外,没有其他解决办法可以完全脱离MDI。无论如何,现在多文档界面已经被弃用了。这样的界面让人们使用起来比原先预想的要困难得多,而且他们已经陷入了几乎完全废弃的境地,尤其是微软自己的软件。您会注意到,而不是使用MDI,Microsoft Office使用多个顶级窗口。你应该考虑用你自己的软件做同样的事情。

MDI的另一个流行替代方案是标签界面,通常由网页浏览器使用。在这里,你有一个单一的顶层窗口,所有的子窗口在主窗口的顶部显示为“选项卡”。用户可以更容易,更直观地在子窗口之间切换,而不是作为独立的MDI子选项卡。