C/Visual C - Menús dinámicos

 
Vista:

Menús dinámicos

Publicado por Sikmar (1 intervención) el 23/08/2001 09:39:54
Hola a todos

Tengo un cliente caprichoso apretándome las tuercas y necesito hacer un menú dinámico en Visual C++. Me explico: dependiendo de algunas condiciones del programa, debería aparecer y desaparecer un submenú en el menú principal (IDR_MAINFRAME).

Sé que es posible hacerlo. He visto aplicaciones en las que al arrancar sólo ves dos o tres items del menú (Archivo, Edición y Ver, por ejemplo), pero al abrir un fichero aparecen más opciones en el menú. Lo que no sé es cómo lo hacen. ¿Quizá incluyendo todos los submenús en el menú principal pero definiendo algunos como "invisibles"?

Si alguien tiene la más ligera pista sobre como hacerlo o por donde buscar en la MSDN, le estaré eternamente agradecido (bueeeeeno, muy agradecido).

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Creación de un menú dinámico en Visual C++

Publicado por Alejandro (913 intervenciones) el 11/10/2024 20:08:29
Para crear un menú dinámico en Visual C++, donde los elementos del menú pueden aparecer o desaparecer según ciertas condiciones, puedes seguir estos pasos:

1. Definir el menú en el Resource Editor



Primero, asegúrate de que tu menú está definido en el Resource Editor. Puedes agregar todos los elementos del menú, incluidos los submenús, aunque algunos de ellos estarán ocultos inicialmente.

2. Modificar la visibilidad del menú en tiempo de ejecución



Para mostrar u ocultar elementos del menú en tiempo de ejecución, puedes usar las funciones `EnableMenuItem` y `DeleteMenu`. Aquí hay un ejemplo básico de cómo hacerlo:

1
2
3
4
5
6
7
8
void CYourApp::OnUpdateYourMenuItem(CCmdUI* pCmdUI) {
    // Aquí puedes definir la lógica para habilitar o deshabilitar el menú
    if (/* condición para mostrar el submenú */) {
        pCmdUI->Enable(TRUE); // Habilita el menú
    } else {
        pCmdUI->Enable(FALSE); // Deshabilita el menú
    }
}

3. Ejemplo de código para mostrar/ocultar un submenú



Aquí tienes un ejemplo más completo que muestra cómo puedes implementar esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void CYourMainFrame::OnUpdateMenu(CCmdUI* pCmdUI) {
    // Suponiendo que tienes un submenú con ID ID_SUBMENU
    if (/* condición para mostrar el submenú */) {
        pCmdUI->Enable(TRUE); // Habilita el submenú
    } else {
        pCmdUI->Enable(FALSE); // Deshabilita el submenú
    }
}
 
void CYourMainFrame::OnSomeAction() {
    // Lógica que cambia las condiciones
    // Por ejemplo, abrir un archivo
    UpdateMenu(); // Actualiza el estado del menú
}

4. Uso de `GetMenu` y `ModifyMenu`



Si necesitas agregar o eliminar elementos del menú en tiempo de ejecución, puedes usar `GetMenu` y `ModifyMenu`. Aquí hay un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
void CYourMainFrame::UpdateMenu() {
    CMenu* pMenu = GetMenu();
    if (pMenu) {
        // Suponiendo que tienes un submenú con ID ID_SUBMENU
        if (/* condición para mostrar el submenú */) {
            pMenu->ModifyMenu(ID_SUBMENU, MF_BYCOMMAND | MF_ENABLED, ID_SUBMENU, _T("Submenú"));
        } else {
            pMenu->ModifyMenu(ID_SUBMENU, MF_BYCOMMAND | MF_DISABLED, ID_SUBMENU, _T("Submenú"));
        }
        DrawMenuBar(); // Redibuja la barra de menú
    }
}

5. Llamar a `UpdateMenu` en el momento adecuado



Asegúrate de llamar a `UpdateMenu` en los momentos adecuados, como después de abrir un archivo o cambiar el estado de la aplicación.

Conclusión



Con estos pasos, deberías poder crear un menú dinámico en tu aplicación de Visual C++. Asegúrate de ajustar las condiciones según las necesidades de tu aplicación. ¡Buena suerte con tu proyecto, Sikmar!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar