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

发布于 2024-12-20 21:18:03 字数 307 浏览 0 评论 0原文

我试图捕获用户控件中的所有鼠标事件(甚至是子控件中发生的事件)。为此,我使用“覆盖 WndProc”方法:

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

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

有什么想法吗?

I'm trying to capture all mouse events in a user control (even the ones that occur in child controls). For that I use the "override WndProc"-approach:

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

I'm especially interested in mouse events, but that does not seem to work. I do get mouse button up/down events, but I don't get mouse move and mouse wheel events.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

稀香 2024-12-27 21:18:03

您可以做的最好的事情就是在您的应用程序中实现 IMessageFilter控制。

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

    }
}

您可以在 PreFilterMessage 方法中编写消息过滤逻辑。
然后只需将其安装到 Main 方法中的消息过滤器列表中即可。

 Application.AddMessageFilter(new CustomMessageFilter());

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

Best you could do is implement IMessageFilter in your control.

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

    }
}

you can write your message filtering logic in PreFilterMessage Method.
Then just install it to the list of Message Filter in Main method.

 Application.AddMessageFilter(new CustomMessageFilter());

This is a Application level hook, that means you can control all the Win32 message within application.

壹場煙雨 2024-12-27 21:18:03

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

通常,这是一种临时状态,例如进行拖放、用户绘图等。

The correct way to capture all mouse events in a control is to call that control's Control.Capture method.

Typically this is a temporary state like doing drag n drop, user-drawing, and so forth.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文