フォームの移動を拒否する。移動できないフォームを作成する - C#

フォームの移動を拒否し、移動できないフォームを作成します。

概要

フォームの移動をブロックするには、ウィンドウメッセージを取得し、SC_MOVE のウィンドウメッセージをブロックすることで移動できないフォームを作成できます。

プログラム例

UI

下図のUIを作成します。新規作成したフォームをそのまま利用します。

コード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace InvalidMoveForm
{
  public partial class FormMain : Form
  {
    const int WM_SYSCOMMAND = 0x0112;
    const long SC_MOVE = 0xF010L;

    public FormMain()
    {
      InitializeComponent();
    }

    protected override void WndProc(ref Message msg)
    {
      if (msg.Msg == WM_SYSCOMMAND && (msg.WParam.ToInt64() & 0xFFF0L) == SC_MOVE) {
        msg.Result = IntPtr.Zero;
        return;
      }
      base.WndProc(ref msg);
    }
  }
}

解説

protected override void WndProc(ref Message msg)
{
  if (msg.Msg == WM_SYSCOMMAND && (msg.WParam.ToInt64() & 0xFFF0L) == SC_MOVE) {
    msg.Result = IntPtr.Zero;
    return;
  }
  base.WndProc(ref msg);
}
WndProcメソッドをオーバーライドし、ウィンドウメッセージを取得します。
今回はウィンドウの移動の操作をキャンセルするため、ウィンドウメッセージがWM_SYSCOMMANDでかつWParamがSC_MOVEであった場合はResultを0にしてウィンドウの移動操作をキャンセルします。

実行結果

プロジェクトを実行するとフォームが表示されます。ただし、タイトルバーをドラッグしてもフォームは移動できません。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2018-03-07
作成日: 2012-05-16
iPentec all rights reserverd.