Este ejemplo se desarrolla con Borland C++ 3.1 (Bajo Windows XP) Podemos manejar las interrupciones del ratón gracias a la interrupción 33h.
Tenemos un programa en modo gráfico bajo C (Utilizando graphics.c) y deseamos programar un botón, que al ser pulsado con el botón izquierdo de nuestro ratón, el programa ejecute una acción.
Tras programar la parte visual, y tras tener dibujado nuestro botón llegamos a programar la interrupción.
Lo primero que debemos hacer es pasar la función al registro AX. Una vez hecho, interrumpimos y 'preguntamos' por los valores registrados en BX, CX,...
Si hacemos esto dentro de una función, nos podrá devolver si se ha hecho click o no.
Antes de empezar a usar el ratón tenemos que inicializarlo. Podemos escribir un procedimiento similar a este:
Código
void iniciarRaton() { union REGS registro_e, registro_s; registro_e.x.ax =0; //Función 00h int86 (0x33, ®istro_e, ®istro_s); }
Cuando llamemos a este procedimiento, reiniciaremos el ratón. Para mas inri, podemos transformar el procedimiento en función, haciendo que devuelva 0 o 1 dependiendo de si se ha podido reiniciar el ratón o no.
También indicar que en vez de declarar union REGS dentro de cada procedimiento o función, es mas cómodo declararlo fuera de todas las funciones, haciendo que sea común a todas.
Función para los botones del ratón:
Código
int movRat() { //Suponemos que union REGS es común registro_e.x.ax =3; int86 (0x33, ®istro_e, ®istro_s); if (registro_s.x.bx ==1) return 1; if (registro_s.x.bx ==2) return 2; }
Esta función nos devuelve 1 si se pulsa el botón izquierdo del ratón en cualquier posición de la pantalla, y 2 para el botón derecho.
Si queremos delimitar la zona de actuación de la interrupción, la tenemos que pasar las coordenadas del botón a CX y DX (X y R, respectivamente)
Con esto, solo nos quedaría hacer una comprobación a la función movRat, para comprobar si se ha producido una interrupción.
Código