2012-07-23 42 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子選項卡。