Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Captura de eventos rueda del ratón.

Iniciado por fgutierrez, 27 de Septiembre de 2007, 01:25:43 PM

« anterior - próximo »

fgutierrez

Hola, puede que la duda que os plantee os parezca tonta, pero ¿ Como puedo con la librería glut capturar eventos generados por la rueda de desplazamiento del ratón? (el tercer botón del mismo). La idea sería implementar un especie de zoom de la cámara utilizado esta rueda.

Muchas gracias
eamos realistas: Exijamos lo imposible

Buffon

en el main:

glutMouseFunc(mouseFunction);


una función mouseFunction:


void mouseFunction(int button, int state, int x, int y)
{
 // TU CODIGO
}


ahora atento a lo siguiente:

en el archivo glut.h:

/*
* GLUT API macro definitions -- mouse state definitions
*/
#define  GLUT_LEFT_BUTTON                   0x0000
#define  GLUT_MIDDLE_BUTTON                 0x0001
#define  GLUT_RIGHT_BUTTON                  0x0002
#define  GLUT_DOWN                          0x0000
#define  GLUT_UP                            0x0001
#define  GLUT_LEFT                          0x0000
#define  GLUT_ENTERED                       0x0001


Es decir, tienes que comprobar si estas variables de control están activadas o no.

edito y te enseño como se comprueba si está el botón del centro pulsado o no:



//variable global
bool botonMedioPulsado;

void mouseFunction(int button, int state, int x, int y)
{
    switch(button)
    {
             case GLUT_MIDDLE_BUTTON:
                                if(state == GLUT_DOWN) botonMedioPulsado = true;
                                if(state == GLUT_UP)        botonMedioPulsado = false;
                                break;
               ......
    }
}

fgutierrez

Muchas gracias buffon por la respuesta, pero creo que no se ha entendido mi pregunta, no es algo tan sencillo lo que busco. Lo que pretendo es implementar un zoom utilizando la ruega giratoria que tienen algunos ratones y que se utiliza, entre otras cosas, para mover barras de desplazamiento. No se el nombre exacto de ese botón, pero espero que sepáis a que me refiero. Manejo eventos de ratón y de hecho tengo ya implementado un trackball utilizando el método de proyección de puntos sobre un semiesfera, pero no conozco como capturar los eventos que se generan (o que creo que se generan) al mover esta rueda.

Perdón si no expreso mi problema con suficiente claridad. Muchas gracias por vuestra ayuda.
eamos realistas: Exijamos lo imposible

[EX3]

En DirectInput se representa dicho valor como eje Z si mal no recuerdo (esto lo toque hace año y medio cuando lo implemente en mi libreria), y segun el valor, positivo o negativo, determinas que direccion de avance estas leyendo (a mi en la dx_lib32 me devuelve valores de 120 o -120 cuando leo el eje Z) Me supongo que esto en Glut y demas API's de Input sera igual.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

BeRSeRKeR

Sin utilizas el API Win32, el mensaje que necesitas manejar debería ser WM_MOUSEWHEEL.

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

Buffon

Cita de: "fgutierrez"Muchas gracias buffon por la respuesta, pero creo que no se ha entendido mi pregunta, no es algo tan sencillo lo que busco. Lo que pretendo es implementar un zoom utilizando la ruega giratoria que tienen algunos ratones y que se utiliza, entre otras cosas, para mover barras de desplazamiento. No se el nombre exacto de ese botón, pero espero que sepáis a que me refiero. Manejo eventos de ratón y de hecho tengo ya implementado un trackball utilizando el método de proyección de puntos sobre un semiesfera, pero no conozco como capturar los eventos que se generan (o que creo que se generan) al mover esta rueda.

Perdón si no expreso mi problema con suficiente claridad. Muchas gracias por vuestra ayuda.

con la última versión de GLUT te debería funcionar con esto:

void processMouse(int button, int state, int x, int y)
{
   // Used for wheels, has to be up
if (state == GLUT_UP )
{
if ( button == GLUT_WHEEL_UP )
{
printf("Wheel Up\n");
}
else if( button == GLUT_WHEEL_DOWN )
{
printf("Wheel Down\n");
}
}
}

mira aquí para descargarte el parche para la 3.7.6 http://www.realmtech.net/opengl/glut.php

fgutierrez

Ok, muchas gracias, me bajaré la última versión de glut y haré lo que me propone buffon. Gracias de nuevo.
eamos realistas: Exijamos lo imposible

Buffon

Cita de: "fgutierrez"Ok, muchas gracias, me bajaré la última versión de glut y haré lo que me propone buffon. Gracias de nuevo.

para eso tamos ^^

Pogacha

Cita de: "BeRSeRKeR"Sin utilizas el API Win32, el mensaje que necesitas manejar debería ser WM_MOUSEWHEEL.

Saludos.

Ojo que WM_MOUSEWHEEL anda de win98 en adelante y tenes que tener el SDK apropiado. Pero si estas con el SDK de win95 tan solo tenes que definir:

#define WM_MOUSEWHEEL 0x020A

Mars Attacks

Y si estás con el SDK del Amstrad, olvídate. Aún no había ratones con ruedecitas...

¿Realmente hay alguien que siga desarrollando con la idea de que sea usable en W95? (Pregunto desde mi total ignorancia...)

Pogacha

Algunos VC6.0 vienen con el SDK para win95  :P

Mars Attacks


Pogacha

Yo si.
A mi me conviene que mi exe funcione en cualquier máquina sin mas. Con VC6 lo logro con seguridad de lo que estoy haciendo.

Según tengo entendido, si distribuyes exes creados con el VC7 o arriba tienes que redistribuir complementos para asegurar la compatibilidad, cosa que no me agrada para nada. Ni te cuento si usas dot net o los runtimes de las librerias :(

Si quieres usar el SDK que actualmente distribuye microsoft tenés que olvidarte de la compatibilidad con Windows 98/ME y también pasarte a un VC mas moderno.
Win 98 es obsoleto en realidad, pero el ME no puede obviarse dentro del mercado Shareware.

El limite Shareware a grandes rasgos son 8 años atrás (computadoras y sistemas operativos).
En un año, o sea, para mi próximo proyecto, terminados los que estoy trabajando actualmente, ya le daré un stop a la compatibilidad con ME y serán tan solo 2K, XP y Vista, lo cual simplifica algunas cosas, pero igual seguiré usando el VC6 hasta tener que ponerme de nuevo y comprar algo mejor o usar el Visual Express tal vez ...

Saludos!

Mars Attacks

Hasta el W98 llegaría, pero... ¿por qué el W95? ¿O son el mismo SDK?

Pogacha

El Plarform SDK que se consigue ahora es a partir de 2K, XP y Vista y no anda con el VC6.

El que andaba en VC6 y permitía generar código para win98 ya no esta disponible. Lo he buscado por todos lados sin suerte.

Pero también pasa que las diferencias entre win95 y 98 son muy pocas y no vale la pena darle tanta bola (a no ser por esto de la rueda del ratón):

New Messages in Windows 98
New Functions in Windows 98
New Changes Between Windows 95 and Windows 98

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.