Tengo un cuadro de diálogo de la aplicación en la que quiero tener clickable elementos de menú en la parte superior del cuadro de diálogo. Estos elementos no aparecen en un menú desplegable, pero en realidad ejecutar los comandos asociados.

Hice esto mediante el establecimiento de Popup=False en los cuadros de diálogo de propiedades y la asignación de un id de mensaje pero mi problema es no tener la capacidad para deshabilitar el elemento correctamente cuando no tiene ningún sentido para que el artículo sea clickable (dependiendo del estado interno almacenados en el cuadro de diálogo)

Ya he encontrado la forma de deshabilitar cualquier ventana emergente de padres de los elementos de menú de http://www.microsoft.com/msj/0299/c/c0299.aspx, pero esto no es exactamente lo que quiero

También he encontrado la manera de agregar el comando de menú de enrutamiento a los diálogos de la msdn artículo de knowledge base KB242577.

Esto funciona bien para los sub-elementos de menú, pero no para el menú de nivel superior.

Actualmente estoy usando la siguiente función para hacer la desactivación de

void CYourDlg::EnableMenuItem(UINT nCommand, BOOL bEnable)
{
   CMenu* pMenu = GetMenu();
   pMenu->EnableMenuItem(nCommand, bEnable ? 0 : MF_DISABLED | MF_GRAYED);
}

Este medio funciona, si usted alt-tab lejos de la aplicación se muestra como desactivado, de lo contrario no.

Hay una forma de invalidar el área de programación?

Creo que un no-cliente área de mensajes pueden estar involucrados.

OriginalEl autor Peter Nimmo | 2009-12-02

2 Comentarios

  1. 5

    No lo he probado pero en la ventana regular (no de diálogo) CWnd::DrawMenuBar debe hacer lo que quiera. Se podría trabajar con el cuadro de diálogo de las aplicaciones.

    void CYourDlg::EnableMenuItem(UINT nCommand, BOOL bEnable)
    {
       CMenu* pMenu = GetMenu();
       pMenu->EnableMenuItem(nCommand, bEnable ? 0 : MF_DISABLED | MF_GRAYED);
       DrawMenuBar();
    }
    Gracias por tu ayuda, que parece haber hecho el truco.
    Creo que la suya es la única solución, ya que los controladores ON_UPDATE_COMMAND_UI sólo se activan cuando alguien hace clic en un menú. En el caso de un menú normal de los elementos que posiblemente debe ser deshabilitada son sólo aparecen cuando el usuario hace clic en el menú de nivel superior y esto, por supuesto, comienza OnInitMenuPopup y a su vez la ON_UPDATE_COMMAND_UI controladores
    De acuerdo a MS Si una barra de menú se cambia después de que Windows se ha creado la ventana, llama a esta función para dibujar el cambio de la barra de menú.

    OriginalEl autor BostonLogan

  2. 1

    Creo que se debe añadir un ON_UPDATE controlador para su IDENTIFICADOR de menú. Esto garantizaría que el menú se activa/desactiva cuando desee.

    He seguido KB242577 para que ON_UPDATE_COMMAND_UI sería posible, pero como he dicho antes «Esto funciona bien para los sub-elementos de menú, pero no para el menú de nivel superior.» No actualización de la pantalla hasta que el elemento en cuestión se hace clic en

    OriginalEl autor djeidot

Dejar respuesta

Please enter your comment!
Please enter your name here