더 많은 검색을 한 후, 나는 정확히 내가 원하는 것을 수행하는 clipCursor라는 함수가 user32.dll에 있음을 발견했습니다.
다음은 마우스 커서를 트래핑하는 샘플 앱의 예입니다. Button1을 클릭하면 커서가 (10,10500,500)에 사각형으로 구속됩니다. Button2 (또는 응용 프로그램 닫기)를 누르면 커서가 다시 해제됩니다.
XAML :
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="12,41,0,0" Name="button2" VerticalAlignment="Top" Width="75" Click="button2_Click" />
</Grid>
</Window>
CS :
[DllImport("user32.dll")]
static extern void ClipCursor(ref System.Drawing.Rectangle rect);
[DllImport("user32.dll")]
static extern void ClipCursor(IntPtr rect);
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
System.Drawing.Rectangle r = new System.Drawing.Rectangle(10, 10, 500, 500);
ClipCursor(ref r);
}
private void button2_Click(object sender, RoutedEventArgs e)
{
ClipCursor(IntPtr.Zero);
}
출처
2011-08-17 09:08:18
Ove
이 하나가 클리핑 사각형의 좌표는 전체 화면을 기준 것을 제외하고는 좋은 옵션입니다. 컨트롤의 한계로 제한하는 것이 좋습니다. – StinkyCat
컨트롤에 마우스 트래핑을 원하는 사람은 [이 게시물의 두 번째 답변] (http://stackoverflow.com/questions/4492734/getting-the-top-left-coordinates-of-a-) 주어진 솔루션을 사용하십시오. wpf-uielement) :'Point targetLoc = this.PointToScreen (new Point (0, 0)); System.Drawing.Rectangle r = new System.Drawing.Rectangle (int) targetLoc.X, (int) (targetLoc.X + this.Width), (int) (targetLoc.Y + this) . Height));' – StinkyCat