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

このページのタグ:[C#] [フォーム]
フォームの移動を拒否し、移動できないフォームを作成します。

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について
iPentec all rights reserverd. (ISDC)