我已经重写了UserControl级别的WndProc来检测MouseDown,MouseUp和MouseMove到在该UserControl中添加的任何控件。C#覆盖控制级别的WndProc来检测
protected override void WndProc(ref Message m)
{
Point mouseLoc = new Point();
switch (m.Msg)
{
case WM_LBUTTONDOWN:
System.Diagnostics.Debug.WriteLine("mouse down");
//this.OnMouseDown(new MouseEventArgs(MouseButtons.Left, 1, mouseLoc.X, mouseLoc.Y, 0));
break;
case WM_LBUTTONUP:
System.Diagnostics.Debug.WriteLine("mouse up");
//this.OnMouseDown(new MouseEventArgs(MouseButtons.Left, 1, mouseLoc.X,mouseLoc.Y, 0));
break;
case WM_MOUSEMOVE:
int lParam = m.LParam.ToInt32();
//mouseLoc.X = lParam & 0xFFFF;
//mouseLoc.Y = (int)(lParam & 0xFFFF0000 >> 16);
mouseLoc.X = (Int16)m.LParam;
mouseLoc.Y = (Int16)((int)m.LParam >> 16);
System.Diagnostics.Debug.WriteLine("mouse move: " + mouseLoc.X + ", " + mouseLoc.Y);
//this.OnMouseDown(new MouseEventArgs(MouseButtons.Left, 1, mouseLoc.X,mouseLoc.Y, 0));
break;
}
base.WndProc(ref m);
}
当鼠标指针在用户控件,但是当鼠标指针在其他控件(我的用户里面)这是行不通的MouseMove,向下和向上的工作。
我做错了什么?
目前正在开发一个轻弹和滚动控制。
我试图在输出窗口中获取m.Msg,而鼠标指针位于其他控件上,并显示528和33.您认为这是什么? – jaysonragasa 2010-05-05 06:34:35