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 {wc:StaticStyles:estilo static y varios {wc:WindowStyles: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: {wf: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
D Ejemplo 9 win009.zip 2004-01-18 4287 bytes 606

Comentarios de los usuarios (3)

GHOST
2012-02-18 01:52:21

El curso está muy bueno, lo he estado siguiendo, y cuando intenté hacer un fichero de recurso por mi cuenta, me encontré con una duda... Me gustaría saber cuales son las reglas para colocar las coordenadas, por ejemplo si son pixeles, o que punto exacto indican (inferior derecho, inferior izquierdo, superior derecho o inferior derecho), si alguien pudiera darme una orientacion en e l tema se lo agradecería mucho

Salvador Pozo
2012-02-20 18:58:04

Hola:

Las coordenadas de las plantillas de los cuadros de diálogo se expresan en unidades de diálogo (dialog base units).

Ten en cuenta que estas plantillas deben ser independientes del dispositivo, de modo que deben usarse unidades que garanticen que los diálogos se verán igual en cualquier dispositivo.

Por eso no podemos usar pixeles. Es su lugar se usan estas unidades, que equivalen, en el eje horizontal a un cuarto de la anchura media de la fuente del sistema, y en el vertical a un octavo de la altura media del carácter en la fuente del sistema.

El origen de coordenadas es la esquina superior izquierda de la ventana, y no del área de cliente.

Todo esto complica mucho diseñar diálogos sobre el papel, por lo que es recomendable usar un editor. Te recomiendo ResEdit, que puedes descargar gratis desde:

http://www.resedit.net/

Hasta pronto.

GHOST
2012-02-22 00:52:24

Gracias, el curso está muy bueno, gracias por aclararme esa duda, que me estaba complicando.