2013-02-15 28 views
1

你會如何在桌面圖標後面放置WinForms表單,但在壁紙前面?爲了使桌面成爲父窗體,我使用:如何在桌面圖標後面放置表單?

[DllImport("user32.dll", SetLastError = true)] 
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

    [DllImport("user32.dll", SetLastError = true)] 
    static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); 

    IntPtr desktopHandle = (IntPtr)FindWindow("Progman", null); 
    WallForm wallWindow = new WallForm();//WinForms Form 

    ... 

    private void SwitchParent() 
    { 
     wallWindow.Show(); 
     SetParent(wallWindow.Handle, desktopHandle); 
     //wallWindow.SendToBack(); 
    } 

這可以工作,但它將窗體放在桌面圖標的前面。如果我在窗體上調用SendToBack,它會消失,大概在壁紙後面。我怎樣才能讓表單處於圖標和桌面背景之間?

+2

您可以將窗口保存爲桌面背景設置的位圖,但我假設您需要一個工作應用程序,在那種情況下它是不可能的。 – 2013-02-15 02:40:27

+0

這是什麼用例?也許有更好的方法來實現相同的目標。 – 2013-02-15 05:52:30

回答

3

我不相信這是可以做到的。桌面窗口是呈現桌面圖像和圖標的單個窗口,因此無法在桌面圖像和圖標之間插入窗口。

寫一個處理背景圖像和桌面圖標的shell替換程序不同(一個主要的開發任務有很多障礙),我能想到的唯一的另一個選擇是掛接到桌面的事件並攔截WM_ERASEBKGND或類似的你自己的繪畫。 (有關更多信息,請參見this questionthis question)。

不幸的是,這不會讓您將WinForm放在圖標後面,只有圖像。你必須處理很多其他的窗口消息來模擬一個實際的窗體。無論如何這是一項重大的事業。

+0

有些程序可以在圖標下繪製。所以這是可能的。 – Ampere 2016-04-19 08:52:34

相關問題