Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manejo Del Mouse en Lenguaje C++ (2004-I)
Manejo Del Mouse en Lenguaje C++ (2004-I)
Registros de Propsito
General
AH
AL
AX
BH
BL
BX
CL
DH
DL
DX
Registros de puntero e
ndice
SP
Puntero de pila
1. Registros de la CPU
CH
CX
BP
SI
ndice fuente
DI
Puntero base
Registros de segmento
CS
Segmento de
cdigo
DS
ndice destino
SS
Segmento de pila
ES
Segmento de
datos
Segmento extra
Registro de propsito
especial
IP
Registro de
Puntero de
indicadores
instrucciones
Fig. 1. Registros de la CPU
2. Interrupciones
struct BYTEREGS {
unsigned char al, ah, bl, bh, cl, ch;
unsigned char dl, dh;
};
union
REGS
{
struct WORDREGS x;
struct BYTEREGS h;
};
Fig. 3.- Tipo REGS incluido en el archivo de encabezado
DOS.H
4. Aplicaciones usando el
mouse
Se pueden desarrollar aplicaciones en las que se
incluya el manejo mediante el uso del mouse a
travs de la INT 33h (Mouse) con sus servicios
correspondientes.
3. Funcin int86()
";
}
/*
Programa para usar el mouse
if(regs.x.bx==2)
{
gotoxy(40,12); cout << "Boton
derecho";
gotoxy(40,12); cout << "
";
}
}
return;
}
Fig. 4.- Servicios del mouse
clrscr();
gotoxy(1,24); cout << "Oprima
cualquier tecla para salir";
regs.h.al=0x1; /* Inicializar el
registro AL con el valor 1(hexadecimal)
es decir, invoca el servicio 1 de la INT
33h (mouse)para habilitar el Mouse*/
int86(0x33,®s,®s); /* Invoca la
INT 33h (mouse)*/
while(!kbhit()) /* Ciclo mientras NO
se oprima cualquier tecla*/
{
regs.h.al=0x3; /* Inicializar el
registro AL con el valor 3(hexadecimal)
es decir, invoca el servicio 3 de la INT
33h (mouse) para detectar el status del
mouse, o sea, si se oprime algun boton y
las coordenadas del cursor*/
/* ENCABEZADO
........................................
........ LIBMOUSE.H
.
Instituto Tecnologico de Nuevo Laredo
.
*/
int86(0x33,®s,®s); /* Invoca
la INT 33h (mouse). El servicio 3 de la
INT 33h devuelve el status del mouse en
el registro BX*/
/* Si BX=1 entonces se oprimio el boton
izquierdo*/
/* Si BX=2 entonces se oprimio el boton
derecho*/
if(regs.x.bx==1)
{
gotoxy(20,12); cout << "Boton
izquierdo";
#ifdef SII
3
struct mdata
ESTRUCTURA DE DATOS DE MOUSE
{
int MouseFlag;
int MouseButton;
int MouseX;
int MouseY;
int MouseMinX;
int MouseMaxX;
int MouseMinY;
int MouseMaxY;
}MouseParams;
#endif SII
*/
/*
#elif zCOMPILER==zTURBOC
regs.x.ax=0;
/* FUNCION #0 DEL MOUSE
*/
int86(zMOUSE,®s,®s);
/* LLAMA LA INTERRUPCION 33 HEX */
Mptr->MouseFlag=regs.x.ax;
/* IGUALA A 0 SI NO ESTA PRESENTE*/
#endif
return;
}
/* FUNCION PARA MOSTRAR EL CURSOR DEL
MOUSE :
*/
void zMouseShow(struct mdata *Mptr)
{
#if zCOMPILER==zQUICKC
inregs.x.ax=1;
int86(zMOUSE,&inregs,&outregs);
#elif zCOMPILER==zTURBOC
regs.x.ax=1;
/* FUNCION #1 DEL MOUSE
int86(zMOUSE,®s,®s);
/* LLAMA LA INTERRUPCION 33 HEX
#endif
return;
}
*/
*/
int86(zMOUSE,®s,®s);
/* LLAMA LA INTERRUPCION 33 HEX
Mptr->MouseButton=regs.x.bx;
/* 1 (IZQUIERDO) 2 (DERECHO)
Mptr->MouseX=regs.x.cx;
/* OBTIENE LA COORDENADA EN x
Mptr->MouseY=regs.x.dx;
/* OBTIENE LA COORDENADA EN y
#endif
return;
}
*/
*/
*/
*/
5. CONCLUSIONES
Aunque existen muchas otras funciones de
manejo del mouse, este artculo presenta los
conceptos y funciones bsicas para iniciar la
codificacin de programas en C++ que permitan
utilizarlo. Aqu se muestran las operaciones
fundamentales y se presentan ejemplos
representativos, los cuales pueden obtenerse en el
sitio http://www.itnuevolaredo.edu.mx/takeyas o
bien solicitarse al autor escribiendo un correo
electrnico a takeyas@itnuevolaredo.edu.mx.
6. BIBLIOGRAFA
Barkakati Nabajyoti. The Waite Groups.
Turbo C Bible. Howard W. Sams & Company.
Estados Unidos. 1990.
Lpez Takeyas, Bruno. Minitaller: Tcnicas
avanzadas de programacin en lenguaje C++.
Instituto Tecnolgico de Nuevo Laredo, Tam.
Mxico. 2003.
Schildt, Herbert. Turbo C. Programacin
avanzada. Segunda edicin, McGraw Hill.
Estados Unidos. 1990.
Staugaard, Andrew. Tcnicas estructuradas y
orientadas a objetos. Una introduccin
utilizando C++. Segunda edicin. Prentice Hall.
Estados Unidos. 1998.