Hasta ahora, solo hemos visto una salida estática en la ventana negra en C / C++ sin ninguna interacción con el dispositivo periférico (como el mouse). Aquí estático significa que la interacción con la pantalla de salida a través del mouse para ejecutar un evento o tarea dinámica. El objetivo será hacer visible el puntero del mouse en nuestra pantalla de salida, a través del cual puede ver cualquier evento nuevo cuando se hace clic con el mouse en la misma ventana de salida.
Requisito: Turbo C++ IDE o DOS BOX
Conocimiento fundamental:
la idea es decirle a un mouse que haga cualquier cosa en la pantalla de salida. En realidad, la comunicación directa con el ratón no es posible sino a través del controlador proporcionado. La idea es usar interrupciones para obtener acceso a este controlador. Cada dispositivo proporcionado por una computadora tiene un puerto único que es un valor hexadecimal que está diseñado para ser independiente de la máquina, lo que mejora la portabilidad del programa. El mouse tiene el puerto 0X33 adjunto. También se requiere el uso de registros de direcciones para acceder a estos puertos. Estos son básicamente UNION de tipo REGS definidos en “ dos.h“. Use dos registros para comunicarse con un controlador de dispositivo, uno para entrada y otro para salida, y envíe el valor al controlador de dispositivo a través del registro de entrada y reciba información incrustada en el registro de salida.
Ahora hay dos formas de mostrar el puntero del mouse en la pantalla C/C++. El primero es el modo no gráfico y el segundo es el modo gráfico. Aquí usamos el modo gráfico. Para cambiar nuestra ventana de salida en el modo gráfico, los pasos se enumeran a continuación:
Habilitar el modo gráfico: para habilitar el modo gráfico, use la función initgraph() que se usa para inicializar el modo gráfico. Esta función está presente en el archivo de cabecera “ graphics.h ” .
Sintaxis de initgraph():
void initgraph(int *gdriver, int *gmode, char *pathtodriver);
- gdriver: es un número entero que especifica qué controlador de gráficos se utilizará. Use DETECT significa que el compilador selecciona automáticamente el controlador adecuado de acuerdo con los requisitos.
- gmode: también es un número entero que especifica el modo de gráficos inicial. when gdriver = DETECT En este caso, initgraph() establece gmode en la resolución más alta disponible para el controlador detectado.
- pathtodriver: indica la ruta del directorio donde initgraph debe buscar los controladores gráficos.
Programa 1:
C
// C program to show how to // enable Graphics mode #include <conio.h> #include <graphics.h> // Driver Code int main() { int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, "C:\\TC\\BGI"); errorcode = graphresult(); // If error occurs if (errorcode == grOk) printf("Graphics enabled: %s\n", grapherrormsg(errorcode)); else printf("Graphics error: %s\n", grapherrormsg(errorcode)); getch(); // Close the graph init() closegraph(); return 0; }
C++
// C++ program to show how to // enable Graphics mode #include <bits/stdc++.h> #include <conio.h> #include <graphics.h> // Driver Code int main() { int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, "C:\\TC\\BGI"); errorcode = graphresult(); // If error occurs if (errorcode == grOk) cout << "Graphics enabled: \n" << grapherrormsg(errorcode); else cout << "Graphics error: \n" << grapherrormsg(errorcode); getch(); // Close the graph init() closegraph(); return 0; }
Producción:
Requisito previo para la programación del mouse:
Registro AX : se puede acceder a las diversas funciones del mouse usando diferentes valores del registro de entrada AX y pasando esos valores al puerto del mouse usando una interrupción. Las funciones se enumeran a continuación en la tabla:
Aquí AX , BX , CX y DX son miembros de UNION REGS .
Interrumpir | Servicio | Descripción |
0X33 O 51 |
0 |
|
1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
7 |
|
|
8 |
|
Función int86() : int86() es una función de biblioteca C que facilita el acceso a las interrupciones de servicio de DOS y BIOS. Es un contenedor sobre una llamada de interrupción de ensamblaje en línea. Toma valores de registro de CPU con objeto a una estructura donde las variables miembro son equivalentes a registros de CPU. Se necesitan tres argumentos.
// Sintaxis de la declaración
int int86(int intno, union REGS* inregs, union REGS* outregs);
// intno: vector de interrupción/número de servicio
// inregs: el argumento de entrada se registra como REGS
// outregs: el argumento de salida se registra como REGS
Casos de uso de la programación del mouse :
Hay varios casos de uso de la programación del mouse que se enumeran a continuación:
- Detección de ratón
- Mostrar el puntero del mouse en modo gráfico
- Ocultar puntero
- Determinar la posición actual
- Identificado en qué botón del mouse se hace clic
- Restringir el puntero del mouse
- Dibujo a mano alzada (Uso de todas las funciones)
Programa 2:
a continuación se muestra el programa para verificar si un controlador de mouse está cargado o no:
C
// C program to check mouse status #include <conio.h> #include <dos.h> #include <graphics.h> #include <stdio.h> union REGS in, out; // Function to implement the functionality // of detecting Mouse void detectMouse() { in.x.ax = 0; // Invoke interrupt (in86 method // description mentioned above) int86(0X33, &in, &out); if (out.x.ax == 0) printf("\nMouse Failed To Initialize"); else printf("\nMouse was Successfully Initialized"); } // Driver Code int main() { clrscr(); int gdriver = DETECT, gmode; // Method to enable graphics initgraph(&gdriver, &gmode, "c:\tc\bgi"); // Function Call detectMouse(); getch(); // Close graphics mode closegraph(); return 0; }
C++
// C++ program to check mouse status #include <bits/stdc++.h> #include <conio.h> #include <dos.h> #include <graphics.h> #include <stdio.h> union REGS in, out; // Function to implement the functionality // of detecting Mouse void detectMouse() { in.x.ax = 0; // Invoke interrupt (in86 method // description mentioned above) int86(0X33, &in, &out); if (out.x.ax == 0) cout << "\nMouse Failed To" << " Initialize"; else cout << "\nMouse was Successfully" << " Initialized"; } // Driver Code int main() { clrscr(); int gdriver = DETECT, gmode; // Method to enable graphics initgraph(&gdriver, &gmode, "c:\tc\bgi"); // Function Call detectMouse(); getch(); // Close graphics mode closegraph(); return 0; }
Producción:
Publicación traducida automáticamente
Artículo escrito por shubhamp338 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA