C#トリビアルメモ4 (最大化・最小化などのイベントをフックする)

なんと、HUNTER×HUNTERの新刊出るんですね。しらんかった。

C#で例えば最大化とかのイベントを取得してみます。
FormBorderStyleをtoolwindowとかにしておけば、最大化・最小化ボタンはなくなりますが、タイトルバーをダブルクリックしたり、右クリックから最大化とかを選択したら最大化されてしまいます。
こういうのを無効にしたいときはFormのWndProc()をオーバーライドします。


protected override void WndProc(ref Message m)
{
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_MASK = 0xFFF0;
    const int SC_MINIMIZE = 0xF020;
    const int SC_MAXIMIZE = 0xF030;

    // フォームの最大化・最小化を捕捉したら以降の制御をカットする
    switch (m.Msg)
    {
        case WM_SYSCOMMAND:
            switch (m.WParam.ToInt32() & SC_MASK)
            {
                case SC_MINIMIZE:
                case SC_MAXIMIZE:
                    return;
                    break;

                default:
                    break;
            }
            break;

        default:
            break;                    
    }

    // 基本クラスのメソッドを実行する
    base.WndProc(ref m);
    
}

まー、この辺は完全にWin32APIの話ですが。
どうようにしてSC_MOVEをとれば移動できないようなものもつくれます。

以上

コスミー について

昔(?)はゲーム作ってました。 今もなんか作ろうとしています。
カテゴリー: C# パーマリンク

C#トリビアルメモ4 (最大化・最小化などのイベントをフックする) への6件のフィードバック

  1. o-taki のコメント:

    Form のプロパティの MaximizeBox と MinimizeBox を False にすれば両方とも無効にできますよ。

  2. コスミー のコメント:

    そんな簡単にできたのか。知りませんでした。
    まあ、記事のようにすると状況に応じて最大化・最小化を無効・有効にできるということで。
    RFRの場合、ツールバーのときは無効、ツールバーじゃないときは有効になるように、switchの中にさらにif文分岐してます。

  3. ふりっぱぁ のコメント:

    タイトルバーダブルクリックでの
    「通常」→「最大化」とか「最大化」→「戻す」が
    捕捉できなかったりします…
    解決策模索中…

  4. コスミー のコメント:

    >タイトルバーダブルクリックでの
    >「通常」→「最大化」とか「最大化」→「戻す」が
    >捕捉できなかったりします…

    あれ?少なくとも「通常」→「最大化」は補足できますよ。タイトルバーをダブルクリックの。

  5. AUKHTCDGAWXERKBTHW のコメント:

    I read several good stuff here. Certainly worth bookmarking for revisiting. I surprise how much effort you put to create such a excellent informative website.

  6. Sonia のコメント:

    There is certainly a lot to learn about this issue.
    I love alll of the points you have made.

コメントを残す

メールアドレスが公開されることはありません。