class MouseMessageFilter : IMessageFilter, IDisposable
public MouseMessageFilter()
public void Dispose()
StopFiltering();
#region IMessageFilter Members
public bool PreFilterMessage(ref Message m)
// Call the appropriate event
return false;
#endregion
#region Events
public class CancelMouseEventArgs : MouseEventArgs
{...}
public delegate void CancelMouseEventHandler(object source, CancelMouseEventArgs e);
public event CancelMouseEventHandler MouseMove;
public event CancelMouseEventHandler MouseDown;
public event CancelMouseEventHandler MouseUp;
public void StartFiltering()
StopFiltering();
Application.AddMessageFilter(this);
public void StopFiltering()
Application.RemoveMessageFilter(this);
}
然后,我可以在我的容器控件中处理MouseMove事件,检查鼠标是否在我的父控件中,并开始工作。
在我的表单类中,我创建并连接了过滤器:
public class MyForm : Form
MouseMessageFilter msgFilter;
public MyForm()
msgFilter = new MouseMessageFilter();
msgFilter.MouseDown += new MouseMessageFilter.CancelMouseEventHandler(msgFilter_MouseDown);
msgFilter.MouseMove += new MouseMessageFilter.CancelMouseEventHandler(msgFilter_MouseMove);
private void msgFilter_MouseMove(object source, MouseMessageFilter.CancelMouseEventArgs e)
if (CheckSomething(e.Control)
e.Cancel = true;
}