在用户控件中捕获所有鼠标事件

时间:2011-12-12 09:27:36

标签: c# .net winforms mouseevent

我正在尝试捕获用户控件中的所有鼠标事件(甚至是子控件中出现的事件)。为此,我使用“覆盖WndProc” - 方法:

protected override void WndProc(ref Message m)
{
  System.Diagnostics.Debug.WriteLine(m.Msg.ToString());
  base.WndProc(ref m);
}

我对鼠标事件特别感兴趣,但这似乎不起作用。我确实得到了鼠标按钮上/下事件,但我没有获取鼠标移动和鼠标滚轮事件。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

你能做的最好就是在你的控制中实施IMessageFilter

 public class CustomMessageFilter:UserControl,IMessageFilter
{
    public bool PreFilterMessage(ref Message m)
    {
        //Process your message here
        throw new NotImplementedException();

    }
}

您可以在 PreFilterMessage 方法中编写邮件过滤逻辑。 然后将其安装到Main方法中的Message Filter列表中。

 Application.AddMessageFilter(new CustomMessageFilter());

这是一个应用程序级别挂钩,这意味着您可以控制应用程序中的所有Win32消息。

答案 1 :(得分:0)

捕获控件中所有鼠标事件的正确方法是调用该控件的Control.Capture方法。

通常这是一个临时状态,例如执行拖放操作,用户绘图等等。