応用

MouseDownイベントの追加

  • WebBrowserコントロールにはMouseDownイベントがありません。クリックを検出できるようにWebBrowserコントロールを拡張します。
  • WebBrowserコントロールを継承したWebBrowserExクラスを定義します。ここでWndProcによりマウスクリックのメッセージを受け取るとMouseDownイベントを発生させます。
  • フォームにWebBrowserExコントロールを貼り付ければ、MouseDownイベントが使用できます。

■Form1.vb

						Public Class Form1

							Private Sub WebBrowserEx1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles WebBrowserEx1.MouseDown
								MsgBox(String.Format("Button:{0} , x:{1} , y:{2}", e.Button.ToString, e.X, e.Y))
							End Sub

						End Class
					

■WebBrowserEx.vb

						Imports System.Windows.Forms

						Public Class WebBrowserEx : Inherits WebBrowser

							Private Const WM_PARENTNOTIFY As Integer = &H210

							Private Enum WM As Integer
								WM_LBUTTONDOWN = &H201
								WM_RBUTTONDOWN = &H204
								WM_MBUTTONDOWN = &H207
								WM_XBUTTONDOWN = &H20B
							End Enum

							Private Enum XBUTTON As Integer
								XBUTTON1 = &H1
								XBUTTON2 = &H2
							End Enum

							Public Shadows Event MouseDown As MouseEventHandler

							Protected Overrides Sub WndProc(ByRef m As Message)

								If m.Msg = WM_PARENTNOTIFY Then

									Select Case LOWORD(m.WParam.ToInt32)
										Case WM.WM_LBUTTONDOWN
											Dim e As New MouseEventArgs(MouseButtons.Left, 1, LOWORD(m.LParam.ToInt32), HIWORD(m.LParam.ToInt32), 0)
											RaiseEvent MouseDown(Me, e)

										Case WM.WM_RBUTTONDOWN
											Dim e As New MouseEventArgs(MouseButtons.Right, 1, LOWORD(m.LParam.ToInt32), HIWORD(m.LParam.ToInt32), 0)
											RaiseEvent MouseDown(Me, e)

										Case WM.WM_MBUTTONDOWN
											Dim e As New MouseEventArgs(MouseButtons.Middle, 1, LOWORD(m.LParam.ToInt32), HIWORD(m.LParam.ToInt32), 0)
											RaiseEvent MouseDown(Me, e)

										Case WM.WM_XBUTTONDOWN
											Select Case HIWORD(m.WParam.ToInt32)
												Case XBUTTON.XBUTTON1
													Dim e As New MouseEventArgs(MouseButtons.XButton1, 1, LOWORD(m.LParam.ToInt32), HIWORD(m.LParam.ToInt32), 0)
													RaiseEvent MouseDown(Me, e)

												Case XBUTTON.XBUTTON2
													Dim e As New MouseEventArgs(MouseButtons.XButton2, 1, LOWORD(m.LParam.ToInt32), HIWORD(m.LParam.ToInt32), 0)
													RaiseEvent MouseDown(Me, e)

											End Select
									End Select
								End If
								MyBase.WndProc(m)
							End Sub

							'下位16ビットを取得する
							Private Function LOWORD(ByVal DWORD As Integer) As Short
								Return CShort(DWORD And &HFFFFI)
							End Function

							'上位16ビットを取得する
							Private Function HIWORD(ByVal DWORD As Integer) As Short
								Return CShort(DWORD >> 16)
							End Function

						End Class
					

参考

VB2005のWebBrowserコントロールにMouseDownイベントを拡張する