Barras de estado (controles de Windows)

Una barra de estado es una ventana horizontal en la parte inferior de una ventana primaria en la que una aplicación puede mostrar varios tipos de información de estado. La barra de estado se puede dividir en partes para mostrar más de un tipo de información. En la captura de pantalla siguiente se muestra la barra de estado en la aplicación Microsoft Windows Paint. En este caso, la barra de estado contiene el texto "Para ayuda, haga clic en Temas de Ayuda en el menú Ayuda". La barra de estado es el área situada en la parte inferior de la ventana que contiene el texto de ayuda y la información de coordenadas.

captura de pantalla de la aplicación de pintura, con una barra de estado que contiene sugerencias sobre la ayuda en línea

Esta sección incluye los temas siguientes.

Tipos y estilos

La posición predeterminada de una barra de estado se encuentra en la parte inferior de la ventana primaria, pero puede especificar el estilo CCS_TOP para que aparezca en la parte superior del área cliente de la ventana primaria.

Puede especificar el estilo de SBARS_SIZEGRIP para incluir un control de tamaño en el extremo derecho de la barra de estado.

Nota

No se recomienda combinar los estilos de CCS_TOP y SBARS_SIZEGRIP porque el agarre de tamaño resultante no es funcional.

 

Tamaño y alto

El procedimiento de ventana de la barra de estado establece automáticamente el tamaño inicial y la posición de la ventana, omiiendo los valores especificados en la función CreateWindowEx . El ancho es el mismo que el del área cliente de la ventana primaria. El alto se basa en las métricas de la fuente que está seleccionada actualmente en el contexto del dispositivo de la barra de estado y en el ancho de los bordes de la ventana.

El procedimiento de ventana ajusta automáticamente el tamaño de la barra de estado cada vez que recibe un mensaje de WM_SIZE . Normalmente, cuando cambia el tamaño de la ventana primaria, el elemento primario envía un mensaje WM_SIZE a la barra de estado.

Una aplicación puede establecer el alto mínimo del área de dibujo de una barra de estado enviando a la ventana un mensaje de SB_SETMINHEIGHT , especificando el alto mínimo, en píxeles. El área de dibujo no incluye los bordes de la ventana. Un alto mínimo es útil para dibujar en una barra de estado dibujada por el propietario. Para obtener más información, vea Barras de estado dibujadas por el propietario más adelante en este capítulo.

Para recuperar los anchos de los bordes de una barra de estado, envíe una SB_GETBORDERS mensaje a la ventana. El mensaje incluye la dirección de una matriz de tres elementos que recibe los anchos.

barras de estado de Multiple-Part

Una barra de estado puede tener muchas partes diferentes, cada una de las cuales muestra una línea de texto diferente. Divide una barra de estado en partes enviando la ventana un mensaje SB_SETPARTS , especificando el número de partes que se van a crear y la dirección de una matriz de enteros. La matriz contiene un elemento para cada parte y cada elemento especifica la coordenada de cliente del borde derecho de una parte.

Una barra de estado puede tener un máximo de 256 partes, aunque las aplicaciones suelen usar mucho menos de eso. Recupera un recuento de las partes de una barra de estado, así como la coordenada del borde derecho de cada parte, enviando a la ventana un mensaje SB_GETPARTS .

Operaciones de texto de la barra de estado

Para establecer el texto de cualquier parte de una barra de estado, envíe el mensaje de SB_SETTEXT , especificando el índice de base cero de una parte, una dirección de la cadena que se va a dibujar en la parte y la técnica para dibujar la cadena. La técnica de dibujo determina si el texto tiene un borde y, si es así, el estilo del borde. También determina si la ventana primaria es responsable de dibujar el texto. Para obtener más información, consulte la sección Barras de estado dibujadas por el propietario a continuación.

De forma predeterminada, el texto está alineado a la izquierda dentro de la parte especificada de una barra de estado. Puede insertar caracteres de tabulación (\ t) en el texto para centrarlo o alinearlo a la derecha. El texto situado a la derecha de un solo carácter de tabulación está centrado y el texto situado a la derecha de un segundo carácter de tabulación está alineado a la derecha.

Para recuperar texto de una barra de estado, use los mensajes SB_GETTEXTLENGTH y SB_GETTEXT .

Si la aplicación usa una barra de estado que solo tiene una parte, puede usar el WM_SETTEXT, WM_GETTEXT y WM_GETTEXTLENGTH mensajes para realizar operaciones de texto. Estos mensajes solo tratan con la parte que tiene un índice de cero, lo que le permite tratar la barra de estado de forma muy similar a un control de texto estático.

Para mostrar una línea de estado sin crear una barra de estado, use la función DrawStatusText . La función usa las mismas técnicas para dibujar el estado que el procedimiento de ventana para la barra de estado, pero no establece automáticamente el tamaño y la posición de la información de estado. Al llamar a la función, debe especificar el tamaño y la posición de la información de estado, así como el contexto del dispositivo de la ventana en la que se va a dibujar.

barras de estado de Owner-Drawn

Puede definir partes individuales de una barra de estado para que sean partes dibujadas por el propietario. El uso de esta técnica proporciona más control de lo que, de lo contrario, tendría sobre la apariencia de la parte de la ventana. Por ejemplo, puede mostrar un mapa de bits en lugar de texto o dibujar texto mediante una fuente diferente.

Para definir una parte de ventana como dibujada por el propietario, envíe el mensaje SB_SETTEXT a la barra de estado, especificando la parte y la técnica de dibujo de SBT_OWNERDRAW. Cuando se especifica SBT_OWNERDRAW, el parámetro lParam es un valor definido por la aplicación de 32 bits que la aplicación puede usar al dibujar la parte. Por ejemplo, puede especificar un identificador de fuente, un identificador de mapa de bits, una dirección de una cadena, etc.

Cuando una barra de estado necesita dibujar una parte dibujada por el propietario, envía el mensaje WM_DRAWITEM a la ventana primaria. El parámetro wParam del mensaje es el identificador de ventana secundario de la barra de estado y el parámetro lParam es la dirección de una estructura DRAWITEMSTRUCT . La ventana primaria usa la información de la estructura para dibujar la parte. Para una parte dibujada por el propietario de una barra de estado, DRAWITEMSTRUCT contiene la siguiente información.

Miembro Descripción
CtlType Indefinido; no use.
CtlID Identificador de la ventana secundaria de la barra de estado.
Itemid Índice de base cero de la parte que se va a dibujar.
itemAction Indefinido; no use.
itemState Indefinido; no use.
hwndItem Identificador de la barra de estado.
hDC Controle el contexto del dispositivo de la barra de estado.
rcItem Coordenadas de la parte de ventana que se va a dibujar. Las coordenadas son relativas a la esquina superior izquierda de la barra de estado.
itemData Valor de 32 bits definido por la aplicación especificado en el parámetro lParam del mensaje SB_SETTEXT .

 

Barras de estado de modo simple

Para colocar una barra de estado en "modo simple", envíe un mensaje SB_SIMPLE . Una barra de estado de modo simple muestra solo una parte. Cuando se establece el texto de la ventana, la ventana se invalida, pero no se vuelve a dibujar hasta el siguiente WM_PAINT. La espera del mensaje reduce el parpadeo de pantalla al minimizar el número de veces que se vuelve a dibujar la ventana. Una barra de estado de modo simple es útil para mostrar el texto de ayuda de los elementos de menú mientras el usuario se desplaza por el menú.

La cadena que muestra una barra de estado mientras está en modo simple se mantiene por separado de las cadenas que muestra mientras se encuentra en modo nomple. Esto significa que puede colocar la ventana en modo simple, establecer su texto y volver al modo nomple sin que se cambie el texto del modo nomple.

Al establecer el texto de una barra de estado de modo simple, puede especificar cualquier técnica de dibujo excepto SBT_OWNERDRAW. Una barra de estado de modo simple no admite el dibujo del propietario.

Procesamiento de mensajes de barra de estado predeterminado

En esta sección se describen los mensajes que controla el procedimiento de ventana para la clase STATUSCLASSNAME predefinida.

Message Procesamiento predeterminado
WM_CREATE Inicializa la barra de estado.
WM_DESTROY Libera los recursos asignados para la barra de estado.
WM_GETFONT Devuelve el identificador a la fuente actual con la que la barra de estado dibuja su texto.
WM_GETTEXT Copia el texto de la primera parte de una barra de estado en un búfer. Devuelve un valor de 32 bits que especifica la longitud, en caracteres, del texto y la técnica utilizada para dibujar el texto.
WM_GETTEXTLENGTH Devuelve un valor de 32 bits que especifica la longitud, en caracteres, del texto de la primera parte de una barra de estado y la técnica utilizada para dibujar el texto.
WM_NCHITTEST Devuelve el valor HTBOTTOMRIGHT si el cursor del mouse está en el control de tamaño, lo que hace que el sistema muestre el cursor de ajuste de tamaño. Si el cursor del mouse no está en el control de tamaño, la barra de estado pasa este mensaje a la función DefWindowProc .
WM_PAINT Pinta la región no válida de la barra de estado. Si el parámetro wParam no es NULL, el control asume que el valor es un HDC y pinta mediante ese contexto de dispositivo.
WM_SETFONT Selecciona el identificador de fuente en el contexto del dispositivo para la barra de estado.
WM_SETTEXT Copia el texto especificado en la primera parte de una barra de estado, utilizando la operación de dibujo predeterminada (especificada como cero). Devuelve TRUE si es correcto o FALSE en caso contrario.
WM_SIZE Cambia el tamaño de la barra de estado según el ancho actual del área cliente de la ventana primaria y el alto de la fuente actual de la barra de estado.