Uno de los aspectos más tediosos a la hora de construir nuestras aplicaciones de consola, es crear la interfaz para la aplicación (menús), como solo contamos con el teclado como dispositivo de entrada, nuestras pantallas se convierten en el típico ambiente donde se le solicita al usuario digitar el número de la opción a seleccionar. Esto aparte de ser engorroso para el usuario, nos deja varios aspectos por resolver, como que pasa si se digita una opción no existente en el menú?, o peor aún si se digitan letras en lugar de números?, entre muchas otras. Bueno existen varias formas para resolver estos casos, pero de una u otra manera este tipo de ambientes siguen siendo aburridos y poco amigables con el usuario.
En este post les ofrezco una mejor manera para crear nuestros menús, y así tener una interfaz más amigable y natural en nuestro programa. Esto lo lograremos haciendo uso de algunas teclas como lo son las Flechas (Arriba, Abajo, Derecha e Izquierda) para desplazarnos en las opciones del menú, el Enter para seleccionar una opción, y el Esc para salir del programa. Utilizaremos también algunos colores para distinguir en cual opción nos encontramos del menú, y para mejorar la apariencia de las pantallas.
Acá podemos ver cómo quedaría nuestra interfaz en última instancia:
Básicamente la implementación de este Menú consta dos clases "InterfazConFlechas.cpp" y "UtilidadesInterfaz.h", cómo la idea del este post no es explicar un paso a paso de cómo crear el menú, haré una explicación breve sobre el contenido cada una de las clases, y al final encontraran el link de descarga con el código fuente en un proyecto de Visual 2010. El código esta lo más ordenado y comentado posible para su fácil entendimiento.
La primera clase "InterfazConFlechas.cpp" es donde se implementa la lógica principal (Método MenuPrincipal) que es el que vemos en la imagen anterior. Para este ejemplo cada una de las opciones en caso de seleccionarlas muestra una pantalla donde nos indica la opción seleccionada (algo muy sencillo), pero de igual forma en cada opción podemos agregar otro método con un menú similar.
La otra clase "UtilidadesInterfaz" es donde se implementan algunas funciones necesarias utilizadas en InterfazConFlechas. Tiene una relación de herencia con InterfazConFlechas, para que la misma pueda utilizar los métodos y funciones de esta. Entre los métodos y funciones que tiene están:
La primera clase "InterfazConFlechas.cpp" es donde se implementa la lógica principal (Método MenuPrincipal) que es el que vemos en la imagen anterior. Para este ejemplo cada una de las opciones en caso de seleccionarlas muestra una pantalla donde nos indica la opción seleccionada (algo muy sencillo), pero de igual forma en cada opción podemos agregar otro método con un menú similar.
La otra clase "UtilidadesInterfaz" es donde se implementan algunas funciones necesarias utilizadas en InterfazConFlechas. Tiene una relación de herencia con InterfazConFlechas, para que la misma pueda utilizar los métodos y funciones de esta. Entre los métodos y funciones que tiene están:
- gotoxy() Posiciona el cursor donde voy a imprimir según coordinadas X,Y subministradas
- getKey() Obtiene el valor de la tecla digitada, sin tener que presionar Enter.
- ocultarCursor() Esconde la línea parpadeante de la consola, que es el cursor.
- Salir() Pantalla de confirmación de si desea o no salir del programa.
- Portada() Portada para el programa.
- setColor() Cambia el color de fondo y letra de Consola para las siguientes impresiones.
Este último método setColor(), el valor de color de fondo y letra al que se desea cambiar debe tener un formato hexadecimal (de 0 a F, donde 0 es negro y F blanco). Se deben pasar dos valores el primero para el fondo y el segundo para la letra. Acá podemos ver las posibles combinaciones:
En el caso que la combinación de color tenga un valor con letra como 1F, al método setColor se le debe pasar 0x1F en lugar de pasarle únicamente 1F.
Desde que descubrí esta manera para hacer interfaces en Consola, la utilice en todos mis tareas y trabajos de programación de la Universidad, es bastante fácil de implementar y le da un gran plus a la aplicación, espero también les sea de ayuda. Como nota dado a que para algunas funciones se utiliza la librería "windows.h", solo funciona en sistemas Windows.. LASTIMA!!!, si alguno quiere hacer el aporte de cómo implementar esto mismo sin hacer uso de esta librería bienvenido sea.
Acá pueden obtener el código fuente: Descargar Aquí
Acá pueden obtener el código fuente: Descargar Aquí