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 en la ventana de la clase CStatusBar contiene varios “paneles”. Cada panel es un área rectangular de la barra de estado que se puede utilizar para mostrar información. Por ejemplo, muchas aplicaciones muestran el estado de BLOQ MAYÚS, de BLOQ NUM, y otras claves en los paneles de derecha. Las aplicaciones también muestran a menudo texto informativo en el panel de la izquierda (panel 0), a veces denominado “panel de mensajes”. Por ejemplo, la barra de estado de MFC predeterminado utiliza el panel de mensajes para mostrar una cadena que explica el elemento de menú o el botón de la barra de herramientas actualmente seleccionado. La ilustración de Barras de estado muestra una barra de estado de una aplicación MFC Asistente- creada aplicación.
De forma predeterminada, MFC no permite un panel de CStatusBar cuando crea el panel. Para activar un panel, debe utilizar la macro de ON_UPDATE_COMMAND_UI para cada panel en la barra de estado y actualizar los paneles. Dado que los paneles no envían mensajes de WM_COMMAND (no son como los botones de la barra de herramientas), debe escribir el código manualmente.
Por ejemplo, suponga que un panel tiene ID_INDICATOR_PAGE como identificador de comandos 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
Defina la identificación del panel
En el menú de Visualización , haga clic en vista de recursos. Haga clic con el botón secundario en el recurso y haga clic en Símbolos de recursosdel proyecto. En el cuadro de diálogo símbolos de recursos, haga clic en New. Escriba un nombre de identificador de comando: por ejemplo, ID_INDICATOR_PAGE. Especifique un valor para el identificador, 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.
Defina una cadena predeterminada que se muestra en el panel.
Con la vista de recursos abierto, haga doble clic en Tabla de cadenas en la ventana que muestra los tipos de recursos para la aplicación. Con el editor de Tabla de cadenas abiertos, elija Nueva cadena de menú de INSERT . En la ventana Propiedades de la cadena, seleccione el identificador de comando del panel (por ejemplo, ID_INDICATOR_PAGE) y escriba un valor de cadena predeterminado, como “página”. Cierre el editor de cadenas. (Necesita una cadena predeterminada evitar un error del compilador.)
Agregue el panel a la matriz de indicators .
En el archivo MAINFRM.CPP, busque la matriz de indicators . Id. de este de matriz comando de listas para los todos los indicadores de barra de estado, ordenados de izquierda a derecha. En el punto adecuado en la matriz, escriba el identificador 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 de SetText de la clase CCmdUI en una función de controlador de actualización para el panel. Por ejemplo, puede configurar una variable integer m_nPage que contiene el número de página actual y el uso SetText de establecer el texto del panel a una versión de cadena de ese número.
Nota
Se recomienda el enfoque de SetText .Es posible realizar esta tarea en un ligeramente de nivel inferior llamando a la función SetPaneTextmiembro de CStatusBar .Sin embargo, todavía necesita actualizar el controlador.Sin estos controladores para el panel, MFC automáticamente deshabilita el panel, borrando su contenido.
El siguiente procedimiento muestra cómo utilizar una función de controlador de actualización para mostrar texto en un panel.
Para que un panel muestra el texto
Agregue un controlador de actualización de comandos para el comando.
Agregue manualmente un prototipo del controlador, como se muestra aquí para ID_INDICATOR_PAGE (en MAINFRM.H):
afx_msg void OnUpdatePage(CCmdUI *pCmdUI);
En el archivo adecuado de .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 líneas pasadas de este controlador son el código que muestra el texto.
En el mapa del mensaje, agregue la macro de 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 que se define el valor de la variable miembro de m_nPage (de la clase CMainFrame), las causas de esta técnica el número de página de aparecer en el panel durante el procesamiento inactivo de la misma manera que la aplicación actualiza otros marcadores. Si cambia de m_nPage , la pantalla durante el bucle inactivo siguiente.