- 題名: WebBrowserコントロールでマウスイベントの取得
- 日時: 2008/08/20 21:55:13
- ID: 22769
- この記事の返信元:
- (なし)
- この記事への返信:
- [22772] Re: WebBrowserコントロールでマウスイベントの取得2008/08/21 0:48:09
- ツリーを表示
かふぇおれさん,こんばんは。
DocumentCompletedイベント以後に,Bodyエレメントのイベントを横取りして
新たにイベントを発生させればそれっぽくなるのではないでしょうか。
VB2008EEで作成したサンプルコードです。試してみてください。
Public Class Form1
Private WithEvents WebBrowser As New ExWebBrowser
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.WebBrowser.Dock = DockStyle.Fill
Me.Controls.Add(WebBrowser)
Me.WebBrowser.GoHome()
End Sub
Private Sub WebBrowser_MouseDown(ByVal e As System.Windows.Forms.MouseEventArgs) Handles WebBrowser.MouseDown
Debug.Print("MouseDown!")
End Sub
Private Sub WebBrowser_MouseEnter(ByVal e As System.Windows.Forms.MouseEventArgs) Handles WebBrowser.MouseEnter
Debug.Print("MouseEnter!")
End Sub
Private Sub WebBrowser_MouseLeave(ByVal e As System.Windows.Forms.MouseEventArgs) Handles WebBrowser.MouseLeave
Debug.Print("MouseLeave!")
End Sub
Private Sub WebBrowser_MouseMove(ByVal e As System.Windows.Forms.MouseEventArgs) Handles WebBrowser.MouseMove
Debug.Print("MouseMove!")
End Sub
Private Sub WebBrowser_MouseOver(ByVal e As System.Windows.Forms.MouseEventArgs) Handles WebBrowser.MouseOver
Debug.Print("MouseOver!")
End Sub
Private Sub WebBrowser_MouseUp(ByVal e As System.Windows.Forms.MouseEventArgs) Handles WebBrowser.MouseUp
Debug.Print("MouseUp!")
End Sub
End Class
Public Class ExWebBrowser
Inherits WebBrowser
Private WithEvents Body As HtmlElement
Public Shadows Event MouseDown(ByVal e As MouseEventArgs)
Public Shadows Event MouseUp(ByVal e As MouseEventArgs)
Public Shadows Event MouseEnter(ByVal e As MouseEventArgs)
Public Shadows Event MouseLeave(ByVal e As MouseEventArgs)
Public Shadows Event MouseMove(ByVal e As MouseEventArgs)
Public Shadows Event MouseOver(ByVal e As MouseEventArgs)
Protected Overrides Sub OnDocumentCompleted(ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs)
Me.Body = Me.Document.Body
MyBase.OnDocumentCompleted(e)
End Sub
Private Sub Body_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs) Handles Body.MouseDown
RaiseEvent MouseDown(New MouseEventArgs(e.MouseButtonsPressed, 1, e.ClientMousePosition.X, e.ClientMousePosition.Y, 0))
End Sub
Private Sub Body_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs) Handles Body.MouseUp
RaiseEvent MouseUp(New MouseEventArgs(e.MouseButtonsPressed, 1, e.ClientMousePosition.X, e.ClientMousePosition.Y, 0))
End Sub
Private Sub Body_MouseEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs) Handles Body.MouseEnter
RaiseEvent MouseEnter(New MouseEventArgs(Windows.Forms.MouseButtons.None, 0, e.ClientMousePosition.X, e.ClientMousePosition.Y, 0))
End Sub
Private Sub Body_MouseLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs) Handles Body.MouseLeave
RaiseEvent MouseLeave(New MouseEventArgs(Windows.Forms.MouseButtons.None, 0, e.ClientMousePosition.X, e.ClientMousePosition.Y, 0))
End Sub
Private Sub Body_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs) Handles Body.MouseMove
RaiseEvent MouseMove(New MouseEventArgs(Windows.Forms.MouseButtons.None, 0, e.ClientMousePosition.X, e.ClientMousePosition.Y, 0))
End Sub
Private Sub Body_MouseOver(ByVal sender As Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs) Handles Body.MouseOver
RaiseEvent MouseOver(New MouseEventArgs(Windows.Forms.MouseButtons.None, 0, e.ClientMousePosition.X, e.ClientMousePosition.Y, 0))
End Sub
End Class
VB2005で、WebBrowserコントロールのマウスのクリックやMouseMoveなどのイベントの取得は通常できないため、WebBrowserから派生クラスを作成し、そのイベントを取得したいのですが、WndProcをオーバーライドしてDebug.Print(m.ToString)で確認したところ、MOUSEDOWNは取得できるのですが、MOUSEUPやMOUSEMOVEが取得できずにいます。どうすればMOUSEUPやMOUSEMOVEを取得できるのかわかる方、ぜひ教えてください。よろしくお願いします。