C# 限制鼠标点击
我想在一个区域内限制鼠标点击,如果该区域内有任何控件,它应该允许鼠标点击C# 限制鼠标点击,c#,.net,winforms,C#,.net,Winforms,我想在一个区域内限制鼠标点击,如果该区域内有任何控件,它应该允许鼠标点击 如何做到这一点在表单中,重写WndProc方法,处理鼠标左键消息,如果它在可接受的区域中,则调用基类,否则将吞下消息(即不要调用基类)您只需不响应该区域的鼠标单击事件并实现其子控件的事件即可 或者我不明白你的意思。除了处理鼠标向下/向上的消息外,你可能还需要捕获鼠标 不幸的是,捕获鼠标的最佳方法是监视WM_CAPTURECHANGED消息,这意味着我们需要进入Win32 API来监视此事件,因为Windows窗体没有定义相
如何做到这一点在表单中,重写WndProc方法,处理鼠标左键消息,如果它在可接受的区域中,则调用基类,否则将吞下消息(即不要调用基类)您只需不响应该区域的鼠标单击事件并实现其子控件的事件即可
或者我不明白你的意思。除了处理鼠标向下/向上的消息外,你可能还需要捕获鼠标 不幸的是,捕获鼠标的最佳方法是监视WM_CAPTURECHANGED消息,这意味着我们需要进入Win32 API来监视此事件,因为Windows窗体没有定义相应的事件。 例如,为了处理此Win32消息,首先定义一个内部类来处理低级消息WM_CAPTURECHANGED,并定义事件处理程序:
public partial class Form1 : Form
{
class CaptureChangedWindow : NativeWindow
{
public CaptureChanged OnCaptureChanged;
protected override void WndProc(ref Message m)
{
if (m.Msg == 533) // WM_CAPTURECHANGED
OnCaptureChanged();
base.WndProc(ref m);
}
}
public delegate void CaptureChanged();
...
}
接下来声明一个成员字段以保存CaptureChangedWindow实例:
public partial class Form1 : Form
{
CaptureChangedWindow ccw;
...
}
接下来定义调用CaptureChanged委托时将调用的方法:
public partial class Form1 : Form
{
private void CaptureChangedEventHandler()
{
// your code
// e.g. now it's safe to assume that mouse is captured
}
...
}
最后,修改构造函数以创建和初始化嵌套类:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ccw = new CaptureChangedWindow();
ccw.AssignHandle(Handle);
ccw.OnCaptureChanged +=
new CaptureChanged(CaptureChangedEventHandler);
}
...
}
这就是你所需要的。然后,您可以像往常一样处理其他鼠标事件。Web表单?Windows窗体?MVC?