朧研究所(おぼろけんきゅうじょ)

日々の買ったもの、考えたこと、調べたこと、便利なもの、おでかけ、プログラムを書いていきます。

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」で検索すれば出てくる一覧から、対応する値を指定する。