捕获用户控件中的所有鼠标事件
我试图捕获用户控件中的所有鼠标事件(甚至是子控件中发生的事件)。为此,我使用“覆盖 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以做的最好的事情就是在您的应用程序中实现 IMessageFilter控制。
您可以在 PreFilterMessage 方法中编写消息过滤逻辑。
然后只需将其安装到 Main 方法中的消息过滤器列表中即可。
这是一个应用程序级别的挂钩,这意味着您可以控制应用程序内的所有 Win32 消息。
Best you could do is implement IMessageFilter in your control.
you can write your message filtering logic in PreFilterMessage Method.
Then just install it to the list of Message Filter in Main method.
This is a Application level hook, that means you can control all the Win32 message within application.
捕获控件中所有鼠标事件的正确方法是调用该控件的 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.