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 を呼び出すと、おそらく壁紙の後ろに消えます。アイコンとデスクトップの背景の間にフォームを配置するにはどうすればよいですか?

4

2 に答える 2

3

これが可能だとは思いません。デスクトップ ウィンドウは、デスクトップ イメージとアイコンをレンダリングする単一のウィンドウであるため、デスクトップ イメージとアイコンの間にウィンドウを挿入する方法はありません。

背景画像とデスクトップ アイコンを異なる方法で処理するシェルの置き換えを作成する以外に (多くのハードルを伴う主要な開発タスク)、デスクトップのイベントにフックし、WM_ERASEBKGND などをインターセプトして独自の描画を行うことしか考えられません。(詳細については、この質問またはこの質問を参照してください。)

残念ながら、これではアイコンの背後に WinForm を配置できず、画像のみを配置できます。実際のフォームをシミュレートするには、他の多くの Windows メッセージを処理する必要があります。どう考えても一大事業です。

于 2013-02-15T02:09:40.467 に答える