C#フォームを常に最背面に表示する

スポンサーリンク

フォームを常に最背面に表示したい場合は、Win32 API に頼ることになります。FindWindow 関数で Program Manager という特別なウィンドウ ハンドルを得て、そのハンドルを SetParent 関数で親ウィンドウのハンドルにすることで再背面を実現します。

まずは、ベタな方法からやってみましょう。初めに、API の宣言をしておく必要があります。

サンプルコード

以下にサンプルコードを示します。

C# 全般
// 以下の名前空間をインポートする
using System.Runtime.InteropServices;

public class Form1 : System.Windows.Forms.Form {

   Windows フォーム デザイナで生成されたコード 

    // FindWindow 関数
    [DllImport("USER32.DLL", CharSet=CharSet.Auto)]
    private static extern System.IntPtr FindWindow(
        string lpClassName,
        string lpWindowName
    );

    // SetParent 関数
    [DllImport("USER32.DLL", CharSet=CharSet.Auto)]
    private static extern System.IntPtr SetParent(
        System.IntPtr hWndChild,
        System.IntPtr hWndNewParent
    );

    // ここから先が使用例になります
    private void button1_Click(object sender, System.EventArgs e) {
        // Program Manager のハンドルを取得する
        System.IntPtr hProgramManagerHandle = FindWindow(null, "Program Manager");

        // 正しく取得できた場合は、Program Manager を親ウィンドウに設定する
        if (! hProgramManagerHandle.Equals(System.IntPtr.Zero)) {
            SetParent(this.Handle, hProgramManagerHandle);
        }
    }

}

次に TopMost プロパティに習って、BottomMost プロパティのようなものを作ってみましょう。このプロパティを true に設定すると再背面での表示になり、false に設定すると元に戻るようなイメージになります。

ここから先は保留中...

関連するリファレンス

準備中です。

スポンサーリンク