フォームの移動を拒否し、移動できないフォームを作成します。
概要
フォームの移動をブロックするには、ウィンドウメッセージを取得し、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