オーバーライドしたWndProcでWM_CLOSEのメッセージを捕獲し、何も処理しないことで無かったことにする。 これにより、×ボタンなどにより閉じることができないフォームを作ることができる。 ただし、別の閉じる方法を提供しなければならない。
public class Form1 : System.Windows.Forms.Form
{
// 途中略
// WndProcメソッドをオーバーライドし
// WM_CLOSEメッセージ自体を無視する
protected override void WndProc( ref Message m )
{
const int WM_CLOSE = 0x10;
// ウィンドウを閉じない
if ( m.Msg == WM_CLOSE )
{
// 閉じる処理をキャンセル
m.Result = IntPtr.Zero;
}
else
{
base.WndProc( ref m );
}
}
}
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows フォーム デザイナで生成されたコード "
#End Region
' WndProcメソッドをオーバーライドし
' WM_CLOSEメッセージ自体を無視する
Protected Overrides Sub WndProc(ByRef m As Message)
Const WM_CLOSE As Integer = &H10
' ウィンドウを閉じない
If m.Msg = WM_CLOSE Then
' 閉じる処理をキャンセル
m.Result = IntPtr.Zero
Else
MyBase.WndProc(m)
End If
End Sub
End Class