Acerca de los controles estáticos

Las aplicaciones suelen usar controles estáticos para etiquetar otros controles o para separar un grupo de controles. Aunque los controles estáticos son ventanas secundarias, no se pueden seleccionar. Por lo tanto, no pueden recibir el foco del teclado y no pueden tener una interfaz de teclado. Un control estático que tiene el estilo SS_NOTIFY recibe la entrada del mouse, notificando a la ventana primaria cuando el usuario hace clic o hace doble clic en el control. Los controles estáticos pertenecen a la clase de ventana STATIC.

Aunque los controles estáticos se pueden usar en ventanas superpuestas, emergentes y secundarias, están diseñadas para su uso en cuadros de diálogo, donde el sistema normaliza su comportamiento. Mediante el uso de controles estáticos fuera de los cuadros de diálogo, un desarrollador aumenta el riesgo de que la aplicación se comporte de forma no estándar. Normalmente, un desarrollador usa controles estáticos en cuadros de diálogo o usa el estilo SS_OWNERDRAW para crear controles estáticos personalizados.

En esta sección se tratan los temas siguientes.

Tipos de control estáticos

Hay cuatro tipos de controles estáticos. Cada tipo tiene uno o varios estilos de control estáticos.

Control estático de gráficos simples

Un control estático de gráficos simple muestra un marco o un rectángulo relleno. Un marco se puede dibujar en una serie de estilos, incluidos negro, gris o blanco. Además, un marco se puede dibujar con un estilo grabado para darle un aspecto tridimensional. Los estilos de marco incluyen SS_BLACKFRAME, SS_GRAYFRAME, SS_WHITEFRAME, SS_ETCHEDHORZ, SS_ETCHEDVERT y SS_ETCHEDFRAME.

Un rectángulo se puede rellenar con color en uno de los tres estilos: negro, gris o blanco. Estos estilos se definen mediante las constantes SS_BLACKRECT, SS_GRAYRECT y SS_WHITERECT.

Los estilos gráficos no se pueden combinar.

Control estático de texto

Un control estático de texto muestra texto en un rectángulo en uno de los cinco estilos:

  • alineado a la izquierda sin ajuste de palabras
  • alineado a la izquierda con ajuste de palabras
  • centrado
  • alineado a la derecha
  • simple

Estos estilos se definen mediante las constantes SS_LEFTNOWORDWRAP, SS_LEFT, SS_CENTER, SS_RIGHT y SS_SIMPLE, respectivamente. El sistema reorganiza el texto de estos controles de maneras predefinidas, excepto el texto "simple", que no se reorganiza.

Una aplicación puede cambiar el texto de un control estático de texto en cualquier momento mediante la función SetWindowText o el mensaje WM_SETTEXT .

El sistema muestra tanto texto como pueda en el control estático y clips lo que no cabe. Para calcular un tamaño adecuado para el control, recupere las métricas de fuente del texto. Para obtener más información sobre las fuentes y las métricas de fuente, vea Fuentes y texto.

De forma predeterminada, el texto de la ventana de un control estático, como para otros controles, puede contener una y comercial que define el siguiente carácter como la tecla de método abreviado del control (o, en el caso de la mayoría de los controles estáticos, para el control que etiqueta, que es el siguiente control en el orden de tabulación). Si desea mostrar y comercial en el texto en lugar de usarlos para definir accesos directos, incluya el estilo SS_NOPREFIX.

Control estático de imagen

Un control estático de imagen puede mostrar mapas de bits, iconos (incluidos iconos animados) o metarchivos mejorados. El tipo de gráfico que muestra un control estático determinado depende del estilo del control: SS_BITMAP, SS_ICON o SS_ENHMETAFILE. Una aplicación especifica el estilo cuando crea el control y también especifica un identificador para el mapa de bits, el icono o el metarchivo para que se muestre el control. Una vez creado el control, una aplicación puede asociar un gráfico diferente al control mediante el envío de un mensaje de STM_SETIMAGE , especificando un identificador para el nuevo objeto gráfico. Una aplicación puede recuperar un identificador del objeto gráfico asociado actualmente a un control estático mediante el envío de un mensaje STM_GETIMAGE . Una aplicación envía mensajes a un control estático mediante la función SendDlgItemMessage .

control estático de Owner-Drawn

Al usar el estilo SS_OWNERDRAW, una aplicación puede asumir la responsabilidad de pintar un control estático. La ventana primaria de un control estático dibujado por el propietario (su propietario) recibe un mensaje de WM_DRAWITEM cada vez que se debe pintar el control estático. El mensaje incluye un puntero a una estructura DRAWITEMSTRUCT que contiene información que usa la ventana del propietario al dibujar el control.

Procesamiento de mensajes predeterminado de control estático

El procedimiento de ventana de la clase predefinida de ventana de control estático realiza el procesamiento predeterminado de todos los mensajes que el procedimiento de control estático no procesa. Cuando el control estático devuelve FALSE para cualquier mensaje, el procedimiento de ventana predefinido comprueba los mensajes y lleva a cabo la acción predeterminada descrita en la tabla siguiente. En la tabla, un control estático de texto es un control estático con el estilo SS_LEFTNOWORDWRAP, SS_LEFT, SS_CENTER, SS_RIGHT o SS_SIMPLE.

Message Acción predeterminada
WM_CREATE Carga el objeto gráfico y cambia el tamaño de la ventana al tamaño del objeto para los controles estáticos gráficos. No realiza ninguna acción para otros controles estáticos.
WM_DESTROY Libera y destruye cualquier objeto gráfico, para controles estáticos gráficos. No realiza ninguna acción para otros controles estáticos.
WM_ENABLE Vuelve a dibujar controles estáticos visibles.
WM_ERASEBKGND Devuelve TRUE, lo que indica que el control borra el fondo.
WM_GETDLGCODE Devuelve DLGC_STATIC.
WM_GETFONT Devuelve un identificador a la fuente de los controles estáticos de texto.
WM_GETTEXT Devuelve el número de caracteres copiados.
WM_GETTEXTLENGTH Devuelve la longitud, en caracteres, del texto de un control estático de texto.
WM_LBUTTONDBLCLK Envía a la ventana primaria un código de notificación STN_DBLCLK si el estilo de control es SS_NOTIFY.
WM_LBUTTONDOWN Envía a la ventana primaria un código de notificación STN_CLICKED si el estilo de control es SS_NOTIFY.
WM_NCLBUTTONDBLCLK Envía a la ventana primaria un código de notificación STN_DBLCLK si el estilo de control es SS_NOTIFY.
WM_NCLBUTTONDOWN Envía a la ventana primaria un código de notificación STN_CLICKED si el estilo de control es SS_NOTIFY.
WM_NCHITTEST Devuelve HTCLIENT si el estilo de control es SS_NOTIFY; de lo contrario, devuelve HTTRANSPARENT.
WM_PAINT Vuelve a dibujar el control.
WM_SETFONT Establece la fuente y vuelve a pintar para los controles estáticos de texto.
WM_SETTEXT Establece el texto y vuelve a pintar los controles estáticos de texto.

 

El procedimiento de ventana predefinido pasa todos los demás mensajes a DefWindowProc para el procesamiento predeterminado.