一点设置:项目属性→生成→允许不安全代码(选中);
- xaml代码
<Window x:Class="MouseLimited.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MouseLimited"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Image Name="image1" Source="D:\程序项目目录\ImgList\World.jpg"/>
<StackPanel Grid.Row="1" Orientation="Horizontal">
<Button Content="Mouse Limit" Margin="5" Click="Button_Click1"/>
<Button Content="Mouse Free" Margin="5" Click="Button_Click2"/>
</StackPanel>
</Grid>
</Window>
- 后台代码
using System;
using System.Runtime.InteropServices;
using System.Windows;
namespace MouseLimited
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
// 限定鼠标范围
public struct MyRect
{
public int X;
public int Y;
public int Width;
public int Height;
public MyRect(int x, int y, int width, int height)
{
X = x;
Y = y;
Width = width;
Height = height;
}
}
[DllImport("user32.dll")]
public static extern bool ClipCursor(IntPtr lpRect);
[DllImport("User32.dll")]
static extern bool ClipCursor(ref MyRect lpRect);
unsafe private void SetMouseLimit(Point point)
{
MyRect myRect = new MyRect((int)point.X - 10, (int)point.Y - 200, (int)point.X + 200, (int)point.Y + 10);
ClipCursor(ref myRect);
}
private void Button_Click1(object sender, RoutedEventArgs e)
{
Point p1 = System.Windows.Input.Mouse.GetPosition(e.Source as FrameworkElement);
Point point = (e.Source as FrameworkElement).PointToScreen(p1); // 相对于屏幕坐标
SetMouseLimit(point);
}
private void Button_Click2(object sender, RoutedEventArgs e)
{
ClipCursor(IntPtr.Zero);
}
}
}