フォームを移動できないようにする 最終更新日 2003年8月7日 0:00 Formクラスを継承したクラスで、WndProc()メソッドをオーバーライドし、WM_SYSCOMMANDでのSC_MOVE, SC_TASKLIST, SC_RESTOREの各メッセージに対して、デフォルトの処理を行わないことでウィンドウの移動をキャンセルする。 C# VB 別ウィンドウで開く すべて選択してコピー ダウンロード 行番号を表示する public class Form1 : System.Windows.Forms.Form { // 途中略 // WndProcメソッドをオーバーライド protected override void WndProc( ref Message m ) { const int WM_SYSCOMMAND = 0x0112; const int SC_RESTORE = 0xf120; const int SC_TASKLIST = 0xf130; const int SC_MOVE = 0xf010; // メッセージがWM_SYSCOMMANDの時 if ( m.Msg == WM_SYSCOMMAND ) { // 下位4ビット以外を取得 int command = m.WParam.ToInt32() & 0xfff0; if ( command == SC_MOVE || command == SC_TASKLIST || command == SC_RESTORE ) { // 戻り値に0を指定する m.Result = IntPtr.Zero; } else { // デフォルトの処理を行う base.WndProc( ref m ); } } else { // デフォルトの処理を行う base.WndProc( ref m ); } } } 別ウィンドウで開く すべて選択してコピー ダウンロード 行番号を表示する Public Class Form1 Inherits System.Windows.Forms.Form #Region " Windows フォーム デザイナで生成されたコード " #End Region ' WndProcメソッドをオーバーライド Protected Overloads Overrides Sub WndProc(ByRef m As Message) Const WM_SYSCOMMAND As Integer= &H112 Const SC_RESTORE As Integer = &HF120 Const SC_TASKLIST As Integer = &HF130 Const SC_MOVE As Integer = &HF010 ' メッセージがWM_SYSCOMMANDの時 If m.Msg = WM_SYSCOMMAND Then ' 下位4ビット以外を取得 Dim command As Integer = m.WParam.ToInt32() And &HFFF0 If command = SC_MOVE OrElse _ command = SC_TASKLIST OrElse _ command = SC_RESTORE Then ' 戻り値に0を指定する m.Result = New IntPtr(0) Else ' デフォルトの処理を行う MyBase.WndProc(m) End If Else ' デフォルトの処理を行う MyBase.WndProc(m) End If End Sub End Class