限制鼠标仅在指定区域移动

时间:2017-06-15 14:00:11

标签: c# winforms

private void MoveCursor()
{
   // Set the Current cursor, move the cursor's Position,
   // and set its clipping rectangle to the form. 

   this.Cursor = new Cursor(Cursor.Current.Handle);
   Cursor.Position = new Point(Cursor.Position.X - 50, Cursor.Position.Y - 50);
   Cursor.Clip = new Rectangle(this.Location, this.Size);
}

我使用上面的代码来限制移动,但我仍然可以将鼠标移到窗体外面?

我可以将鼠标移动限制在表单中的指定区域吗?请指教......

1 个答案:

答案 0 :(得分:1)

更新回答:

ClipCursor是您需要的API函数。您需要提供基于屏幕的坐标。

BOOL WINAPI ClipCursor(RECT *lpRect);

查看this link 获取Win32 API代码,this one查看来自C#的pinvoke。

有一对名为SetCapture/ReleaseCapture的Win32 API函数会将鼠标限制在某个窗口范围内。

您需要使用PInvoke来使用它们,但这样可以。

[DllImport("user32.dll")]
static extern IntPtr SetCapture(long hWnd);

SetCapture(Control.Handle);

要记住的一点是,如果使用不当,用户可能无法单击[X]关闭应用程序,因为鼠标无法访问标题栏。