WPF获取鼠标相对于屏幕的绝对位置

最新文章:Virson's Blog

最近在看《深入浅出WPF》,在做练习的时候自己做了一下扩展,在此记下:

XAML代码:

 1 <Window x:Class="TestCanvas.MainWindow"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         Title="登录" Height="110px" Width="300px" WindowStartupLocation="CenterScreen" WindowStyle="None" 
 5         MaxHeight="110px" MaxWidth="300px" MinHeight="110px" MinWidth="300px" MouseDown="Mouse_downHandler"> 
 6     <Canvas>
 7         <TextBlock Text="用户名:" Canvas.Left="12px" Canvas.Top="12px"/>
 8         <TextBox x:Name="tbUserName"  Height="23px" Width="200px" BorderBrush="Black" Canvas.Left="66px" Canvas.Top="9px"/>
 9         <TextBlock Text="密码:" Canvas.Left="12px" Canvas.Top="40.72px" Height="16px" Width="36px"/>
10         <TextBox x:Name="tbPasword"  Height="23px" Width="200px" BorderBrush="Black" Canvas.Left="66px" Canvas.Top="38px"/>
11         <Button Content="登录" Width="80px" Height="23px" Canvas.Left="66" Canvas.Top="67px"/>
12         <Button Content="退出" Width="80px" Height="23px" Canvas.Left="186" Canvas.Top="67px" Click="Close_clickHandler"/>
13     </Canvas>
14 </Window>

CSharp代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Runtime.InteropServices;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 using System.Windows;
 8 using System.Windows.Controls;
 9 using System.Windows.Data;
10 using System.Windows.Documents;
11 using System.Windows.Input;
12 using System.Windows.Media;
13 using System.Windows.Media.Imaging;
14 using System.Windows.Navigation;
15 using System.Windows.Shapes;
16 
17 namespace TestCanvas
18 {
19     /// <summary>
20     /// MainWindow.xaml 的交互逻辑
21     /// </summary>
22     public partial class MainWindow : Window
23     {
24         [StructLayout(LayoutKind.Sequential)]
25         public struct POINT
26         {
27             public int X;
28             public int Y;
29 
30             public POINT(int x, int y)
31             {
32                 this.X = x;
33                 this.Y = y;
34             }
35         }
36 
37         [DllImport("user32.dll", CharSet = CharSet.Auto)]
38         public static extern bool GetCursorPos(out POINT pt);
39 
40         public MainWindow()
41         {
42             InitializeComponent();
43         }
44 
45         public void Close_clickHandler(Object sender, RoutedEventArgs e)
46         {
47             this.Close();
48         }
49 
50         private void Mouse_downHandler(object sender, MouseButtonEventArgs e)
51         {
52             Point p = e.MouseDevice.GetPosition(this);  //获取鼠标相对位置
53 
54             MainWindow.POINT pit = new MainWindow.POINT();
55             MainWindow.GetCursorPos(out pit);   //获取鼠标绝对位置
56 
57             StringBuilder sbRel = new StringBuilder();
58             sbRel.Append("相对位置:(");
59             sbRel.Append(p.X);
60             sbRel.Append(",");
61             sbRel.Append(p.Y);
62             sbRel.Append(")");
63             tbUserName.Text = sbRel.ToString();
64 
65             StringBuilder sbAbs = new StringBuilder();
66             sbAbs.Append("绝对位置:(");
67             sbAbs.Append(pit.X);
68             sbAbs.Append(",");
69             sbAbs.Append(pit.Y);
70             sbAbs.Append(")");
71             tbPasword.Text = sbAbs.ToString();
72         }
73     }
74 }

 

 

posted @ 2013-01-17 23:29  学海无涯1999  阅读(9205)  评论(0编辑  收藏  举报