Visual Studioでのウィンドウメッセージの使い方
■Visual Studioでのウィンドウメッセージの使い方
Windowsではユーザーからの入力や操作はすべてWindowsメッセージとして処理されている。
例えばマウス・カーソルが移動された場合には「WM_MOUSEMOVE」というIDのWindowsメッセージがウィンドウに送られるため、
プログラムではユーザーによるマウス・カーソルの移動を知ることができる。
しかし.NETのWindowsフォームでは、たいていの場合、直接Windowsメッセージをプログラムで処理する必要はなく、
フォームのメンバであるWndProcメソッドが、受け取ったWindowsメッセージを.NETのイベントに置き換えてくれる。
例えば、WM_MOUSEMOVEメッセージがフォームに送られてきたら、フォームでMouseMoveイベントが発生する。
実際この場合には、MouseMoveイベントのイベント・ハンドラを記述すれば、マウス移動時の処理を記述できる。
だが、全てのWindowsメッセージがWndProcメソッドでイベントに置き換えられるわけではない。
このため少し特殊な処理をフォームに実装したい場合などでは、プログラムで直接Windowsメッセージを取得し処理しなければならない。
フォームに送られてくるWindowsメッセージを直接プログラムで処理したい場合には、
Formクラス(System.Windows.Forms名前空間)のWndProcメソッドを自分のフォームでオーバーライドすればよい。
このメソッドはフォームにWindowsメッセージが送られるたびに呼び出される。
Protected Overrides Sub WndProc(ByRef m As Message)
MyBase.WndProc(m)
'有効/無効状態が変更(WM_ENABLE)
If m.Msg = 10 Then
'enable = false
If CInt(m.WParam) = 0 Then
'処理1
'enable = true
Else
'処理2
End If
'終了処理(WM_CLOSE )
ElseIf m.Msg = 16 Then
'処理3
End If
End Sub
m.Msg = 10 の値は、
ネットで「Windows メッセージ」で検索すれば出てくる一覧から、
自分の使用したいイベント選び、
またネットで「WinUser.h」で検索すれば出てくる一覧から、対応する値を指定する。