Compartir por


Actualizar el texto de un panel de barra de estado

En este artículo se explica cómo cambiar el texto que aparece en un panel de barra de estado de MFC. Una barra de estado (un objeto de ventana de la clase CStatusBar) contiene varios "paneles". Cada panel es un área rectangular de la barra de estado que puede usar para mostrar información. Por ejemplo, muchas aplicaciones muestran el estado de Bloq Mayús, Bloq Num y otras teclas en los paneles situados en el extremo derecho. Las aplicaciones también suelen mostrar texto informativo en el panel del extremo izquierdo (panel 0), a veces denominado "panel de mensajes". Por ejemplo, la barra de estado predeterminada de MFC usa el panel de mensajes para mostrar una cadena que explica el elemento de menú o el botón de la barra de herramientas seleccionados actualmente. La figura en Barras de estado muestra una barra de estado de una aplicación MFC creada por el Asistente para aplicaciones.

De forma predeterminada, MFC no habilita un panel CStatusBar cuando crea el panel. Para activar un panel, debe usar la macro ON_UPDATE_COMMAND_UI por cada panel de la barra de estado y actualizar los paneles. Dado que los paneles no envían mensajes WM_COMMAND (no son como botones de la barra de herramientas), debe escribir el código manualmente.

Por ejemplo, supongamos que un panel tiene ID_INDICATOR_PAGE como identificador de comando y que contiene el número de página actual en un documento. El procedimiento siguiente describe cómo crear un nuevo panel en la barra de estado.

Para crear un nuevo panel

  1. Defina el id. de comando del panel.

    En el menú Ver, haga clic en Vista de recursos. Haga clic con el botón derecho en el recurso del proyecto y haga clic en Símbolos de recursos. En el cuadro de diálogo Símbolos de recursos, haga clic en New. Escriba un nombre de id. de comando: por ejemplo, ID_INDICATOR_PAGE. Especifique un valor para el id. o acepte el valor sugerido por el cuadro de diálogo Símbolos de recursos. Por ejemplo, para ID_INDICATOR_PAGE, acepte el valor predeterminado. Cierre el cuadro de diálogo Símbolos de recursos.

  2. Defina una cadena predeterminada que se mostrará en el panel.

    Con la Vista de recursos abierta, haga doble clic en Tabla de cadenas en la ventana que muestra los tipos de recursos de su aplicación. Con el editor de Tabla de cadenas abierto, elija Nueva cadena en el menú Insertar. Seleccione el id. de comando del panel (por ejemplo, ID_INDICATOR_PAGE) y escriba un valor de cadena predeterminado, como "Page". Cierre el editor de cadenas. (Necesita una cadena predeterminada para evitar un error del compilador.)

  3. Agregue el panel a la matriz de indicadores.

    En el archivo MAINFRM. CPP, busque la matriz indicadores. Esta matriz enumera los id. de comando de todos los indicadores de la barra de estado, de izquierda a derecha. En el punto adecuado de la matriz, escriba el id. de comando del panel, como se muestra aquí para ID_INDICATOR_PAGE:

    static UINT indicators[] =
    {
       ID_SEPARATOR,           // status line indicator
       ID_INDICATOR_CAPS,
       ID_INDICATOR_NUM,
       ID_INDICATOR_SCRL,
       ID_INDICATOR_PAGE,
    };
    

La manera recomendada de mostrar texto en un panel es llamar a la función miembro SetText de la clase CCmdUI en una función de controlador de actualización para el panel. Por ejemplo, es posible que desee configurar una variable de entero m_nPage que contenga el número de página actual y use SetText para establecer el texto del panel en una versión de cadena de ese número.

Nota:

El enfoque SetText no se recomienda. Es posible realizar esta tarea en un nivel ligeramente inferior al llamar a la función miembro de CStatusBar SetPaneText. Aun así, todavía necesita un controlador de actualizaciones. Sin este controlador para el panel, MFC deshabilita automáticamente el panel, lo que borra su contenido.

En el procedimiento siguiente se muestra cómo usar una función de controlador de actualización para mostrar texto en un panel.

Para que un panel muestre texto

  1. Agregue un controlador de actualización de comandos para el comando.

    Agregue manualmente un prototipo para el controlador, como se muestra aquí para ID_INDICATOR_PAGE (en MAINFRM. H):

    afx_msg void OnUpdatePage(CCmdUI* pCmdUI);
    
  2. En el archivo adecuado .CPP, agregue la definición del controlador, como se muestra aquí para ID_INDICATOR_PAGE (en MAINFRM. CPP):

    void CMainFrame::OnUpdatePage(CCmdUI* pCmdUI)
    {
       pCmdUI->Enable();
       CString strPage;
       strPage.Format(_T("Page %d"), m_nPage);
       pCmdUI->SetText(strPage);
    }
    

    Las tres últimas líneas de este controlador son el código que muestra el texto.

  3. En la asignación de mensajes adecuada, agregue la macro ON_UPDATE_COMMAND_UI, como se muestra aquí para ID_INDICATOR_PAGE (en MAINFRM. CPP):

    ON_UPDATE_COMMAND_UI(ID_INDICATOR_PAGE, &CMainFrame::OnUpdatePage)
    

Una vez definido el valor de la variable miembro m_nPage (de clase CMainFrame), esta técnica ocasiona que el número de página aparezca en el panel durante el procesamiento inactivo de la misma manera que la aplicación actualiza otros indicadores. Si m_nPage cambia, la presentación cambia durante el siguiente bucle inactivo.

Qué más quieres saber

Consulte también

Implementación de barra de estado en MFC
CStatusBar (clase)