J#(Java)フォームを常に最背面に表示する

スポンサーリンク

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

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

サンプルコード

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

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

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

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

    // FindWindow 関数
    /** @attribute DllImport("USER32.DLL", CharSet=CharSet.Auto) */
    private static final native System.IntPtr FindWindow(
        System.String lpClassName,
        System.String lpWindowName
    );

    // SetParent 関数
    /** @attribute DllImport("USER32.DLL", CharSet=CharSet.Auto) */
    private static final native 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)) {
            System.IntPtr hSuccess = SetParent(this.get_Handle(), hProgramManagerHandle);
        }
    }

}

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

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

関連するリファレンス

準備中です。

スポンサーリンク