1、在开发过程中,常常会处理键盘事件,键盘事件的获得对象是当前获得焦点的控件,但这时鼠标的光标不一定在控件上。
那么怎样才能判断鼠标是否在这上面呢,同时不在上面怎么移动回来。我们的鼠标移动得到的位置,是控件的上的位置,
我们把鼠标转成屏幕位置,然后在键盘事件中把屏幕位置转成控件位置,这样就能判断鼠标是否在控件的上了,如果不在
移动鼠标的光标回到控件上。就完成了。
2、下面是要在工程中记录鼠标屏幕坐标的位置的 X,Y为ScreenX,ScreenY。
3、在鼠标的移动事件中,把控件坐标转成屏幕坐标。
Point MousePoint = e.GetPosition(this); //控件对象坐标
Point p = this.PointToScreen(MousePoint);//把坐标转成屏幕坐标
ScreenX=p.X;
ScreenY=p.Y;
4、在键盘事件时,把屏幕坐标转成控件坐标
Point po=this.PointFromScreen(new Point(ScreenXScreenY));//屏幕坐标转成控件坐标
if ((po.Y > this.ActualHeight || po.Y <= 0) || (po.X <= 0 || po.X > this.ActualWidth - self_Value.picFiveWidth))
{ //不在当前控件上
Point pt = new Point(Math.Ceiling((this.ActualWidth - self_Value.picFiveWidth) / 2), Math.Ceiling(this.ActualHeight / 2));
Point ps = this.PointToScreen(pt);
SetCursorPos((int)ps.X,(int)ps.Y);
}