【问题标题】:How can I trap all mouse events on a control?如何捕获控件上的所有鼠标事件?
【发布时间】:2010-08-12 20:39:34
【问题描述】:

我需要捕获 .NET 的 WebBrowser 上的所有鼠标事件,处理它们并阻止 WebBrowser 获取它们。有什么办法可以做到这一点?如果控件被禁用,我想知道是否有任何方法可以处理鼠标事件。

【问题讨论】:

  • 如果您使用的是 WPF,您可以在 WebBrowser 控件的顶部放置一个透明画布,然后使用 Canvas 捕获所有事件...不过,Winforms 是另一回事。
  • 这读起来有点奇怪,你会忽略它们吗?如果您没有真正想对事件做任何事情,为什么还要麻烦捕获事件?忽略他们???
  • 我会自己处理。我需要自定义 WebBrowser 的默认功能。

标签: c# .net


【解决方案1】:

你必须重写 WndProc() 来拦截鼠标消息。像这样:

using System;
using System.Windows.Forms;

class MyBrowser : WebBrowser {
    protected override void WndProc(ref Message m) {
        if (m.Msg >= 0x200 && m.Msg <= 0x20a) {
            // Handle mouse messages
            //...
        }
        else base.WndProc(ref m);
    }
}

【讨论】:

【解决方案2】:

有一个解决方案。您需要捕获与与 webBrowser 控件关联的 Document 对象关联的鼠标事件。

在 DocumentCompleted 事件发生后,在 DocumentCompleted 事件处理程序中,执行以下操作:

myWebBrowser.Document.MouseDown += new HtmlElementEventHandler(myMouseDown);

并拥有相关的处理程序:

void myMouseDown(object sender, HtmlElementEventArgs e)

{
    your code to handle the mouse event... such as ...

            if (e.MouseButtonsPressed == MouseButtons.Right)
            {
            }
}

【讨论】:

  • 这个拯救了我的一天。
猜你喜欢
  • 1970-01-01
  • 2012-12-16
  • 2020-10-01
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多