• Domingo 22 de Diciembre de 2024, 22:32

Autor Tema:  Cómo hacer un menu circular en C++  (Leído 5210 veces)

vpm

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Cómo hacer un menu circular en C++
« en: Lunes 20 de Julio de 2009, 05:38 »
0
Saludos,

Tengo que realizar un proyecto final en C++ y estoy usando Dev-C++ como Compilador.
Quiero agregarle un menu que sea circular, permitiendo usar las direccionales del teclado, que se resalte la opcion seleccionada, etc...

Por favor quisiera que me ayuden con un ejemplo que sea simple y funcional implementando lo ya dicho.

Gracias...

c14nur0

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Cómo hacer un menu circular en C++
« Respuesta #1 en: Miércoles 22 de Julio de 2009, 04:21 »
0
pq no haces un swith case con las opciones y eso y bueno todo eso lo metes en un while infinito? si es que quieres que sea infinito si queres otra cosa puedes agergar una opcion salir por ejemplo, en esa opcion activas una bandera para que salga del while. eso haria yo no se xD hace ratico no programo en C y apenas estoy retomando el habito xD

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Cómo hacer un menu circular en C++
« Respuesta #2 en: Jueves 23 de Julio de 2009, 12:13 »
0
Si quieres que pase de la primera opción a la última y viceversa, si te he entendido bien, usa el operador % (módulo o resto).  ;)

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Cómo hacer un menu circular en C++
« Respuesta #3 en: Viernes 24 de Julio de 2009, 15:44 »
0
La lógica de un menú así es más o menos sencilla:
- Borras la pantalla
- Imprimes las opciones del menú, resaltando la seleccionada.
- Lees el teclado, ajustas la nueva opción del menú.
- Inicias de nuevo.

El borrado de pantalla, no es necesario si utilizas alguna función que te permita ubicar el cursor en una posición específica dentro de la pantalla (estilo gotoxy de los compiladores de Borland), así simplemente deberías actualizar las opciones correspondientes.

Mencionas que usas Dev-C++ pero no dices qué funciones utilizas para lectura del teclado, ¿estás trabajando con la implementación de conio para MinGW o con las funciones de consola de la API Win32?

Para que el menú sea "circular":
  • inicializa opcion
  • ciclo:
    • leer teclado
    • si se pulsó arriba, opcion = opcion + 1
    • si se pulsó abajo, opcion = opcion - 1
    • ajustar valores de la variable opcion (menú "circular"):
        (si es menor que 1, opcion = MAX_OPCIONES; si es mayor que MAX_OPCIONES, opcion = 1)

Suerte.
La imaginación es el límite.
Hardware & Software | Mexchip

vpm

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Cómo hacer un menu circular en C++
« Respuesta #4 en: Lunes 27 de Julio de 2009, 15:47 »
0
Estoy usando la implementación de conio para MinGW, pero de todos modos las observaciones que has hecho me ayudaran mucho, gracias.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Cómo hacer un menu circular en C++
« Respuesta #5 en: Lunes 27 de Julio de 2009, 17:46 »
0
Muy bien, no olvides comentar qué tal te va.
La imaginación es el límite.
Hardware & Software | Mexchip

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Cómo hacer un menu circular en C++
« Respuesta #6 en: Lunes 27 de Julio de 2009, 19:16 »
0
Es desaconsejable usar conio, no es estándar.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Cómo hacer un menu circular en C++
« Respuesta #7 en: Martes 28 de Julio de 2009, 06:37 »
0
Cita de: "m0skit0"
Es desaconsejable usar conio, no es estándar.
¿Existe alguna biblioteca estándar que permita la detección de las teclas de dirección y el movimiento a alguna ubicación específica dentro de la pantalla?
La imaginación es el límite.
Hardware & Software | Mexchip

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Cómo hacer un menu circular en C++
« Respuesta #8 en: Martes 28 de Julio de 2009, 09:38 »
0
Se puede hacer a mano usando stdio y otras librerías estándar.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Cómo hacer un menu circular en C++
« Respuesta #9 en: Martes 28 de Julio de 2009, 18:29 »
0
Cita de: "m0skit0"
Se puede hacer a mano usando stdio y otras librerías estándar.
¿Qué otras bibliotecas estándar?
¿Puedes explicar cómo conseguiría obtener la pulsación de las teclas de dirección y moverme hacia cierta posición para modificar el texto de una opción en particular y, si fuera posible, modificar el color de la impresión? Es que para estas cosas siempre he recurrido a algo específico según la plataforma en la que trabaje, sin tomarme demasiado tiempo en buscar una alternativa.

Del FAQ de comp.lang.c, pregunta 19.1
Cita de: "comp.lang.c"
How can I read a single character from the keyboard without waiting for the RETURN key? How can I stop characters from being echoed on the screen as they're typed?
Respuesta (recortada):
Cita de: "comp.lang.c"
Alas, there is no standard or portable way to do these things in C. Concepts such as screens and keyboards are not even mentioned in the Standard, which deals only with simple I/O ``streams'' of characters.

At some level, interactive keyboard input is usually collected and presented to the requesting program a line at a time. This gives the operating system a chance to support input line editing (backspace/delete/rubout, etc.) in a consistent way, without requiring that it be built into every program. Only when the user is satisfied and presses the RETURN key (or equivalent) is the line made available to the calling program. Even if the calling program appears to be reading input a character at a time (with getchar or the like), the first call blocks until the user has typed an entire line, at which point potentially many characters become available and many character requests (e.g. getchar calls) are satisfied in quick succession.

When a program wants to read each character immediately as it arrives, its course of action will depend on where in the input stream the line collection is happening and how it can be disabled. Under some systems (e.g. MS-DOS, VMS in some modes), a program can use a different or modified set of OS-level input calls to bypass line-at-a-time input processing. Under other systems (e.g. Unix, VMS in other modes), the part of the operating system responsible for serial input (often called the ``terminal driver'') must be placed in a mode which turns off line-at-a-time processing, after which all calls to the usual input routines (e.g. read, getchar, etc.) will return characters immediately. Finally, a few systems (particularly older, batch-oriented mainframes) perform input processing in peripheral processors which cannot be told to do anything other than line-at-a-time input.

Therefore, when you need to do character-at-a-time input (or disable keyboard echo, which is an analogous problem), you will have to use a technique specific to the system you're using, assuming it provides one.
Ahora, las referencias del grupo son "viejas", no se qué tanto pueda encontrar en los documentos más recientes.
La imaginación es el límite.
Hardware & Software | Mexchip

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Cómo hacer un menu circular en C++
« Respuesta #10 en: Miércoles 29 de Julio de 2009, 12:34 »
0
Sí, tiene razón.  :brickwall: