Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - poyson1

#1
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.
#2
Hola a todos, quisiera por favor que alguien me ayude con una respuesta que necesito, quiero obtener las coodenadas x e y de cualquier punto determinado al cual haga clic desde dentro de un panel o canvas contenido en un form, si me salgo del panel o canvas x e y seran cero (0).

Actualmente lo tengo hecho utilizando la Clase Point de System.Drawing y las coordenadas que he estado capturando  son las de cualquier parte de la pantalla completa del monitor y las que quiero es desde dentro de un panel o canvas de un form.

No se como especificarle a una instancia de Point que su espacio total sera el size del panel o canvas.

Agradecera cualquier ayuda.