Capítulo 10 Control básico Static

Los static son el tipo de control menos interactivo, normalmente se usan como información o decoración. Pero son muy importantes. Windows es un entorno gráfico, y la apariencia forma una parte muy importante de él.

Existen varios tipos de controles static, o mejor dicho, varios estilos de controles static.

Dependiendo del estilo que elijamos para cada control static, su aspecto será radicalmente distinto, desde una simple línea o cuadro hasta un bitmap, un icono o un texto.

Cuando hablemos de controles static de tipo texto, frecuentemente nos referiremos a ellos como etiquetas. Las etiquetas pueden tener también una función añadida, como veremos más adelante: nos servirán para acceder a otros controles usando el teclado.

En realidad ya hemos usado controles static del tipo etiqueta cuando vimos los controles edit, lisbox y button, pero de nuevo los explicaremos ahora con más detalle.

Ficheros de recursos

Empezaremos definiendo varios controles static en el fichero de recursos, y los añadiremos a nuestro dialogo de prueba, para obtener un muestrario:

#include <windows.h>
#include "win009.h"

Menu MENU
BEGIN
 POPUP "&Principal"
 BEGIN
  MENUITEM "&Diálogo", CM_DIALOGO
 END
END

DialogoPrueba DIALOG 0, 0, 240, 120
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
CAPTION "Prueba de static"
FONT 8, "Helv"
BEGIN
 CONTROL "Frame1", -1, "STATIC",
    SS_WHITEFRAME | WS_CHILD | WS_VISIBLE,
    8, 5, 52, 34
 CONTROL "Frame2", -1, "STATIC",
    SS_GRAYFRAME | WS_CHILD | WS_VISIBLE,
    12, 9, 52, 34
 CONTROL "Frame3", -1, "STATIC",
    SS_BLACKFRAME | WS_CHILD | WS_VISIBLE,
    16, 13, 52, 34
 CONTROL "Rect1", -1, "STATIC",
    SS_BLACKRECT | WS_CHILD | WS_VISIBLE,
    72, 22, 48, 34
 CONTROL "Rect2", -1, "STATIC",
    SS_GRAYRECT | WS_CHILD | WS_VISIBLE,
    12, 60, 52, 34
 CONTROL "Rect3", -1, "STATIC",
    SS_WHITERECT | WS_CHILD | WS_VISIBLE,
    72, 60, 48, 34
 CONTROL "Bitmap1", -1, "STATIC",
    SS_BITMAP | WS_CHILD | WS_VISIBLE,
    128, 22, 18, 15
 CONTROL "Icono", -1, "STATIC",
    SS_ICON | WS_CHILD | WS_VISIBLE,
    188, 47, 20, 20
 CONTROL "Edit &1:", -1, "STATIC",
    SS_LEFT | WS_CHILD | WS_VISIBLE,
    128, 73, 40, 9
 CONTROL "", ID_EDIT1, "EDIT",
    ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP,
    180, 73, 20, 12
 CONTROL "Edit &2:", -1, "STATIC",
    SS_LEFT | WS_CHILD | WS_VISIBLE,
    128, 95, 28, 8
 CONTROL "", ID_EDIT2, "EDIT",
    ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP,
    180, 95, 20, 12
 CONTROL "Aceptar", IDOK, "BUTTON",
    BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP,
    186, 6, 50, 14
END

Hemos añadido diez nuevos controles static. Para más detalles acerca de los controles static ver CONTROL#CONTROL_STATIC:controles static.

Ahora veamos cómo hemos definido nuestros controles static:

CONTROL "Frame1", -1, "static", SS_WHITEFRAME | WS_CHILD | WS_VISIBLE, 8, 5, 52, 34
CONTROL "Bitmap1", -1, "static", SS_BITMAP | WS_CHILD | WS_VISIBLE, 128, 22, 18, 15
CONTROL "Icono", -1, "static", SS_ICON | WS_CHILD | WS_VISIBLE, 188, 47, 20, 20
CONTROL "Edit &1:", -1, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 128, 73, 40, 9
  • CONTROL es la palabra clave que indica que vamos a definir un control.
  • A continuación, en el parámetro text, en el caso de los static tiene sentido para las etiquetas, los bitmaps y los iconos. En estos dos últimos casos indicará el nombre del recurso a insertar. En el resto de los casos se incluye como información. Comentaremos algo más sobre los textos de la etiquetas más abajo.
  • id es el identificador del control. Los controles static no suelen necesitar un identificador, ya que no suelen tener un comportamiento interactivo. De modo que todos los identificadores de controles static serán -1.
  • class es la clase de control, en nuestro caso "STATIC".
  • style es el estilo de control que queremos. En nuestro caso es una combinación de un estilo static y varios de ventana.
    • SS_WHITEFRAME, SS_GRAYFRAME, SS_BLACKFRAME: Crea un rectángulo vacío o un marco de color blanco, gris o negro, respectivamente. SS_WHITEREC, SS_GRAYREC, SS_BLACKREC: Crea un rectángulo relleno de color blanco, gris o negro, respectivamente. SS_BITMAP mostrará el mapa de bits indicado en el campo text. SS_ICON mostrará el icono indicado en el campo text. SS_LEFT, SS_RIGHT, SS_CENTER: indican que es una etiqueta y ajustará el texto a la izquierda, la derecha o el centro, respectivamente.
    • WS_CHILD: crea el control como una ventana hija.
    • WS_VISIBLE: crea una ventana inicialmente visible.
  • coordenada x del control.
  • coordenada y del control.
  • width: anchura del control.
  • height: altura del control.

En el caso de las etiquetas, cuando se incluye el carácter '&', el siguiente carácter de la cadena aparecerá subrayado, indicando que puede ser usado como acelerador, (pulsando la tecla [ALT] más el carácter subrayado), para acceder al control más cercano, normalmente a su derecha o debajo. Pero, cuidado, en realidad el acelerador situará el foco en el control definido exactamente a continuación del control static en el fichero de recursos, y no al más cercano físicamente en pantalla.

En el ejemplo, verifica lo que sucede al pulsar la tecla ALT más '1' ó '2'. Verás que el foco del teclado se desplaza a los cuadros de edición 1 y 2.

Iniciar controles static

Los controles static normalmente no necesitan iniciase, por algo son estáticos. Sin embargo, a veces necesitaremos modificar el texto de alguna etiqueta, esto puede ser útil para mostrar alguna información en un cuadro de diálogo, por ejemplo. Para eso podemos usar la misma función que en los controles edit: SetDlgItemText. En este caso, necesitaremos usar un identificador válido para el control estático.

Tratamiento de acciones de los controles static

Los controles static tampoco responderán, normalmente, a acciones del usuario, ni tampoco generarán mensajes. En el caso de las etiquetas, el comportamiento de los aceleradores es automático y no requerirá ninguna acción del programa.

Ejemplo 9

Nombre Fichero Fecha Tamaño Contador Descarga
Ejemplo 9 win009.zip 2004-01-18 4287 bytes 30