Cuándo se llama a los controladores actualizados
Supongamos que el usuario hace clic en el mouse en el menú Archivo, que genera un mensaje de WM_INITMENUPOPUP. El mecanismo de actualización del marco actualiza colectivamente todos los elementos del menú Archivo antes de que el menú baje para que el usuario pueda verlo.
Para ello, el marco enruta los comandos de actualización a todos los elementos de menú en el menú emergente a lo largo del enrutamiento de comandos estándar. Los destinos de comando en el enrutamiento tienen la oportunidad de actualizar cualquier elemento de menú mediante la coincidencia del comando actualizar con una entrada de asignación de mensajes adecuada (del formulario ON_UPDATE_COMMAND_UI
) y una llamada a una función de "controlador de actualización". Por lo tanto, para un menú con seis elementos de menú, se envían seis comandos de actualización. Si existe un controlador de actualización para el id. de comando del elemento de menú, se le llama para realizar la actualización. Si no es así, el marco comprueba la existencia de un controlador para ese id. de comando y habilita o deshabilita el elemento de menú según corresponda.
Si el marco de trabajo no encuentra una entrada ON_UPDATE_COMMAND_UI
durante el enrutamiento de comandos, habilita automáticamente el objeto de interfaz de usuario si hay una entrada ON_COMMAND
en algún lugar con el mismo id. de comando. De lo contrario, deshabilita el objeto de interfaz de usuario. Por lo tanto, para asegurarse de que un objeto de interfaz de usuario está habilitado, proporcione un controlador para el comando que el objeto genera o proporcione un controlador de actualización para él. Consulte la figura en el tema Objetos de interfaz de usuario e identificadores de comando.
Es posible deshabilitar la deshabilitación predeterminada de objetos de interfaz de usuario. Para obtener más información, consulte el miembro m_bAutoMenuEnable de la clase CFrameWnd
en la Referencia de MFC.
La inicialización del menú es automática en el marco y se produce cuando la aplicación recibe un mensaje de WM_INITMENUPOPUP. Durante el bucle inactivo, el marco busca en el enrutamiento de comandos para los controladores de actualización de botones de la misma manera en que lo realiza para los menús.
Consulte también
Procedimiento para actualizar objetos de la interfaz de usuario