Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Capturar El Movimiento Del Raton Con Win32 Api

Iniciado por _Grey, 16 de Julio de 2005, 05:09:03 PM

« anterior - próximo »

_Grey

 Estoy usando los mensajes de windows para controlar el desplazamiento del raton (WM_MOUSEMOVE, y los de pulsaciones de botonts).

Pero con estos lo que realmente consigo es obtener la posicion del cursor en pantalla, se puede obtener el "desplazamiento" de este en lugar de su posicion en ventana como lo tengo ahora?? con win32API nada de DirectX.

gracias.

Saludos.

ajmendoza

 Seguramente me confundo, pero en winapi (he programado taaaan poco con esto) la posicion del raton no se conseguia con el parametro lparam?

WORD Posicionx  = LOWORD(lParam); //---> Posicion Horizontal
WORD Posiciony = HIWORD(lParam);   //---> Posicion Vertical

Para calcular el desplazamiento, supongo que solo tendrás que restar.  

BeRSeRKeR

 Que yo recuerde no existe ningún mensaje que te devuelva el incremento de la posición del ratón (supongo que a eso te refieres con lo de desplazamiento) por lo que tendrás que calcularlo tú mismo.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

vincent

 La WinAPI sólo te devuelve las posiciones absolutas. También las puedes capturar con la siguiente función:

POINT Coordenadas;
GetCursorPos(&Coordenadas);
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Pogacha

 He! vamos que es un delta nada mas!

static int dx, dy; // EDIT: Esto es lo que buscas
static int Posicion_Actualx, Posicion_Actualy; // esta la agarras como dijo vincent
static int Ultima_Posicionx, Ultima_Posiciony; // al incializar arreglar para que valgan posicion_actual

void mouse_update(void) // invokesela cada vez que quieras updatar las dx y dy
{
  POINT p;
  GetCursorPos(&P);
  Posicion_Actulalx= P.x;
  Posicion_Actulaly= P.y; // no recuerdo si estos eran los miembros.
   dx= Posicion_Actualx - Ultima_Posicionx;
   dy= Posicion_Actualy - Ultima_Posiciony;
  Centrar_Mouse(); // no me acuerdo pero es facil.
  Ultima_Posicionx = Posicion_Actualx;
  Ultima_Posiciony = Posicion_Actualy;
}



A no ser que lo que quieras es trabajar sin centrar el raton en ningun momento, donde puede haber problemas con los bordes da la pantalla, pues si hay un desplazamiento contra el borde windows lo recorta. Esto no se como se hace.

Saludos.

_Grey

 es exactamente lo que dice BeRSeRKeR.

Ya se me paso por la cabeza esta otra posibilidad, pero me extrañaba que con win32API no se pudiera.

Bueno entonces para capturar siempre el desplazamiento del raton deberia reposicionar con SetCursorPos() en el centro del area cliente de la ventana, y aqui me surge otro problemilla.... ;

Con GetClientRect() obtengo las coordenadas de un area cliente de una ventana, pero estas son relativas a la ventana; es decir solo consigo altura y ancho.

Con GetWindowRect() saco las coordenadas de la zona de la ventana pero como esta tiene barra de titulo y bordes......

Hay alguna manera de deducir la posicion en pantalla del area cliente de una ventana?

BeRSeRKeR

 Para pasar las coordenadas de ventana a coordenadas de pantalla tienes que utilizar la función:

BOOL ClientToScreen(
 HWND hWnd,       // handle to window
 LPPOINT lpPoint  // screen coordinates
);


Supongo que te refieres a eso...

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

_Grey

 Pues si bastaria con pasarle 0,0 para obtener la posicion del area cliente en coordenadas de pantalla.

Muchas gracias, es era funcion completamente desconocida para mi.

Saludos.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.