Estilos estáticos gráficos

Recordemos ahora los diferentes estilos de controles estáticos, y aprovechemos para ver algunos que no vimos anteriormente:

Marcos

Rectángulos

Ranurados

Ejemplos

estilos gráficos

Más sobre los ranurados

Los ranurados se consiguen mediante el uso de la función DrawEdge, que también está disponible para usarse en la decoración de ventanas y cuadros de diálogo.

No se trata de una función del GDI, sino de una función de user32, por lo que este es, probablemente, el mejor sitio para comentar su uso.

Esta función tiene cuatro parámetros:

  • El primero es un manipulador del DC, donde se trazará el ranurado.
  • El segundo es un puntero a una estructura RECT con las coordenadas lógicas del rectángulo a ranurar.
  • El tercero sirve para especificar qué tipo de borde queremos trazar para el interior y exterior. Hay dos opciones para el borde interior: BDR_RAISEDINNER y BDR_SUNKENINNER (hacia afuera y hacia adentro, respectivamente); y dos opciones para el exterior: BDR_RAISEDOUTER y BDR_SUNKENOUTER. Se debe combiar una opción interior con una exterior, de modo que, hay cuatro posibilidades, para las que también existen macros definidas: EDGE_BUMP, EDGE_ETCHED, EDGE_RAISED y EDGE_SUNKEN, (reborde, ranurado, elevado y hundido).

estilos DrawEdgegráficos

  • El cuarto parámetro sirve para indicar el tipo de borde, y también pueden ser combinados para obtener más tipos. Para ver cada tipo individual se puede usar el programa de ejemplo.
    Algunos de los tipos se refieren a los lados del rectángulo que se van a dibujar, por ejemplo, BF_RIGHT, BF_LEFT, BF_TOP y BF_BOTTOM, o combinaciones de ellos, como BF_BOTTOMLEFT, BF_BOTTONRIGHT, BF_TOPLEFT y BF_TOPRIGHT. Estos estilos se pueden combinar entre si para obtener las combinaciones que faltan, usando el operador de bits |. También se puede usar BF_RECT para mostrar los cuatro lados del rectángulo.
    Otros tipos permiten trazar diagonales: BF_DIAGONAL, BF_ENDTOPRIGHT, etc.
    El resto permite definir diferentes aspectos, por ejemplo, BF_FLAT crea ranurados planos, que no dan sensación de relieve; BF_MIDDLE muestra la superficie interior del rectángulo a un nivel intermedio de profundidad, usando un tono de gris intermedio; MF_MONO elimina por completo el relieve 3D; BF_SOFT da un acabado blando, redondeado; BF_ADJUST crea el ranurado de modo que se deje libre el área interna del rectángulo para que la use el cliente.

Estilos estáticos de texto

Entre los estilos para controles estáticos de texto tenemos los siguientes:

  • SS_SIMPLE: la forma simple alinéa el texto a la izquierda, y descartará la parte que no quepa en el rextángulo especificado.
  • SS_LEFTNOWORDWRAP: igual que el estilo SS_SIMPLE, salvo que los caracteres de tabulación se expanden.
  • SS_LEFT: igual que el estilo SS_LEFTNOWORDWRAP, salvo que el texto se dividirá en tantas líneas como sea necesario para visualizarlo por completo.
  • SS_CENTER: igual que SS_LEFT, salvo que cada línea de texto se centrará horizontalmente en el rectángulo dado.
  • SS_RIGHT: igual que SS_LEFT, salvo que las líneas se alinéan a la derecha.

estilos de texto

Se puede modificar el texto dentro de un control estático mediante la función SetWindowText o mediante el mensaje WM_SETTEXT.

Recordemos que podemos enviar mensajes a un control mediante las funciones SendDlgItemMessage, conociendo el identificador del control, o usando SendMessage, si disponemos del manipulador de ventana del control. Este manipulador se puede conseguir también mediante la función GetDlgItem, conociendo el identificador del control.

Estas tres líneas de código son, por lo tanto, equivalentes:

   SetWindowText(GetDlgItem(hwnd, ID_EST), "Nuevo texto");
   SendDlgItemMessage(hwnd, ID_EST, WM_SETTEXT, 0, (LPARAM)"Nuevo texto");
   SendMessage(GetDlgItem(hwnd, ID_EST), WM_SETTEXT, 0, (LPARAM)"Nuevo texto");

El modificador de estilo SS_NOPREFIX se puede aplicar a cualquiera de los estilos anteriores. Cuando se hace, el resultado es que los caracteres & no se interpretan como prefijos de aceleradores. Por defecto, el carácter & no se muestra, sino que provoca que el siguiente carácter se subraye, y la tecla correspondiente a ese carácter funcione como un acelerador. Cuando este acelerador se usa, el foco pasa al siguiente control que admita el foco del teclado.

modificador SS_NOPREFIX