2015-07-06 157 views
0

在我的节目我加入这个代码,所以当我移动我的鼠标都在屏幕上,我会实时获取鼠标光标坐标:如何将单击pictureBox时鼠标光标坐标转换为屏幕相对鼠标光标坐标?

Form1的负载:

private void Form1_Load(object sender, EventArgs e) 
     { 
      System.Windows.Forms.Timer t1 = new System.Windows.Forms.Timer(); 
      t1.Interval = 50; 
      t1.Tick += new EventHandler(timer1_Tick); 
      t1.Enabled = true;; 
     } 

然后就是获得方法鼠标位置:

public static Point GetMousePosition() 
     { 
      var position = System.Windows.Forms.Cursor.Position; 
      return new Point(position.X, position.Y); 
     } 

然后TIMER1蜱事件:

private void timer1_Tick(object sender, EventArgs e) 
     { 
      label1.Text = string.Format("X={0}, Y={1}", GetMousePosition().X, GetMousePosition().Y); 
     } 

然后我跑了一些应用程序和移动鼠标悬停在某个具体位置的应用程序窗口在屏幕上,我发现这个坐标:

358,913

现在,我有我的计划与项目列表框每个项目呈现应用程序截图如果我在BATTLEFIELD 3区域中点击pictureBox例如在这种情况下,我根据pictureBox区域获得鼠标光标坐标。

Screenshots

所以我做:

Point screenCoordinates; 
    Point pictureBoxSnapCoordinates; 
    private void pictureBoxSnap_MouseDown(object sender, MouseEventArgs e) 
    { 
     screenCoordinates = pictureBoxSnap.PointToScreen(e.Location); 
     pictureBoxSnapCoordinates = e.Location; 
    } 

现在,当我在图片框在相同的位置单击,因为我找到了坐标358,913,但是,从图片框这样的结果是:

screenCoordinates 435,724个

pictureBoxSnapCoordinates 23423

screenCoordinates与我在鼠标移动358,913时发现的坐标不同,它甚至不是很接近。 358,913和437,724之间有很大差异

回答

1

e.Location是相对于Control's左上角。如果要使用e.Location来获取屏幕坐标,则必须先执行pictureBoxSnap.PointToScreen(Point.Empty);,然后再用e.Location进行偏移。

另外,Cursor.Position返回一个Point对象,所以制造new Point(...)以下。