Bueno parece que el tema no solo se me hace a mi dificil...
Aqui les pegare un codigo que he resuelto a ver si el mismo les da alguna idea y me pueden ayudar.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace PosicionCursor
{
public partial class frmMain : Form
{
[DllImport("user32.dll")]
// GetCursorPos()hace todo posible
static extern bool GetCursorPos(ref Point lpPoint);
// Variable que necesitaremos para contar los pixeles viajados
static protected long totalPixels = 0;
static protected int currX;
static protected int currY;
static protected int diffX;
static protected int diffY;
public frmMain()
{
InitializeComponent();
}
private void tmrDef_Tick(object sender, EventArgs e)
{
//Nuevo punto el cual sera actualizado por la funcion con las coordenadas actuales
Point defPnt = new Point();
//Llama la funcion y pasa el Punto, dfPnt
GetCursorPos(ref defPnt);
// Ahora despues de llamar la funcion, defPnt conteniendo las coordenadas las cuales podemos leer
lblCoordX.Text = "X = " + defPnt.X.ToString();
lblCoordY.Text = "Y = " + defPnt.Y.ToString();
// Si el cursor se mueve para donde sea
if (diffX != defPnt.X | diffY != defPnt.Y)
{
// Calcula la distancia del movimiento (horizontal y verticalmente)
diffX = (defPnt.X - currX);
diffY = (defPnt.Y - currY);
// La diferencia sera negativa si el cursor fue movido a la izquierda o arriba
// y si eso sucede, hara el numero positivo
if (diffX < 0)
{
diffX *= -1;
}
if (diffY < 0)
{
diffY *= -1;
}
// Agregar a los pixeles viajados un contador
totalPixels += diffX + diffY;
// y mostrar en el label los pixeles viajadas
//lblTravel.Text = "Viajaste " + totalPixels + " pixeles";
}
// Necesitamos esto para ver la diferencia de pixeles entre dos movimientos de dos mouses
currX = defPnt.X;
currY = defPnt.Y;
}
private void btnReset_Click(object sender, EventArgs e)
{
totalPixels = 0;
}
}
}
Si pegan ese codigo el cual esta en un simple form con tres label, un timer y un button, si lo prueban se daran cuenta de que puedo capturar las coordenadas X e Y de cualquier parte de la pantalla donde se mueva el Mouse, y mi Incognita esta en tomar esas mismas coordenadas (X,Y) pero dentro de un Formulario o dentro de un panel o canvas o cualquier otro control, lo que quiero es especificarle a POINT que no sera la screen completa sino solo un control y si se sale de ahi sera 0,0.
Aqui les pegare un codigo que he resuelto a ver si el mismo les da alguna idea y me pueden ayudar.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace PosicionCursor
{
public partial class frmMain : Form
{
[DllImport("user32.dll")]
// GetCursorPos()hace todo posible
static extern bool GetCursorPos(ref Point lpPoint);
// Variable que necesitaremos para contar los pixeles viajados
static protected long totalPixels = 0;
static protected int currX;
static protected int currY;
static protected int diffX;
static protected int diffY;
public frmMain()
{
InitializeComponent();
}
private void tmrDef_Tick(object sender, EventArgs e)
{
//Nuevo punto el cual sera actualizado por la funcion con las coordenadas actuales
Point defPnt = new Point();
//Llama la funcion y pasa el Punto, dfPnt
GetCursorPos(ref defPnt);
// Ahora despues de llamar la funcion, defPnt conteniendo las coordenadas las cuales podemos leer
lblCoordX.Text = "X = " + defPnt.X.ToString();
lblCoordY.Text = "Y = " + defPnt.Y.ToString();
// Si el cursor se mueve para donde sea
if (diffX != defPnt.X | diffY != defPnt.Y)
{
// Calcula la distancia del movimiento (horizontal y verticalmente)
diffX = (defPnt.X - currX);
diffY = (defPnt.Y - currY);
// La diferencia sera negativa si el cursor fue movido a la izquierda o arriba
// y si eso sucede, hara el numero positivo
if (diffX < 0)
{
diffX *= -1;
}
if (diffY < 0)
{
diffY *= -1;
}
// Agregar a los pixeles viajados un contador
totalPixels += diffX + diffY;
// y mostrar en el label los pixeles viajadas
//lblTravel.Text = "Viajaste " + totalPixels + " pixeles";
}
// Necesitamos esto para ver la diferencia de pixeles entre dos movimientos de dos mouses
currX = defPnt.X;
currY = defPnt.Y;
}
private void btnReset_Click(object sender, EventArgs e)
{
totalPixels = 0;
}
}
}
Si pegan ese codigo el cual esta en un simple form con tres label, un timer y un button, si lo prueban se daran cuenta de que puedo capturar las coordenadas X e Y de cualquier parte de la pantalla donde se mueva el Mouse, y mi Incognita esta en tomar esas mismas coordenadas (X,Y) pero dentro de un Formulario o dentro de un panel o canvas o cualquier otro control, lo que quiero es especificarle a POINT que no sera la screen completa sino solo un control y si se sale de ahi sera 0,0.