WebBrower(.NET) 応用テクニック
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