29 Objetos básicos del GDI:
Plumas geométricas
En el capítulo 18 vimos cómo crear y usar plumas cosméticas, y hablamos un poco de plumas geométricas, aunque sin entrar en detalles. En este capítulo veremos cómo crear, usar y destruir plumas geométricas, así como sus características y propiedades.
Atributos de las plumas geométricas
Las plumas geométricas tienen siete atributos: anchura, estilo, color, patrón, rayado, estilo de extremos y estilo de uniones. Recordemos que las plumas cosméticas sólo tenían los tres primeros.
Los patrones y el rayado son atributos que hasta ahora sólo hemos asociado a pinceles, pero también los poseen las plumas geométricas.
Esto hace que las plumas geométricas sean más difíciles de crear, y más lentas a la hora de trazar líneas, pero son mucho más potentes y versátiles que las cosméticas.
Para crear plumas geométricas usaremos la función ExtCreatePen.
Veamos ahora algunos de esos atributos en detalle, y qué opciones existen.
Anchura
Vimos que en el caso de las plumas cosméticas, el grosor se expresaba en unidades de dispositivo, es decir, en pixels. En las geométricas se expresa en unidades lógicas, es decir, su anchura se ve afectada por las transformaciones del sistema de coordenadas.
Aunque solemos decir que las funciones CreatePen y CreatePenIndirect crean plumas cosméticas, esto es falso. Windows sólo crea plumas cosméticas de un pixel (cuando indicamos un grosor de cero en estas funciones), de modo que si creamos plumas más anchas usando estas funciones, en realidad estaremos creando plumas geométricas. Esta limitación de Windows no tiene por qué respetarse en futuras versiones, de modo que estas funciones, podrían crear plumas cosméticas de más de un pixel en el futuro, así que seguiremos diciendo que las plumas creadas usando estas dos funciones son cosméticas, aunque el grosor sea distinto de cero. Pero debemos tener en cuenta que estas plumas se verán afectadas por las transformaciones del espacio del mundo, o por el mapeo.
Estilo de línea
El estilo de línea define el tipo de trazos de las líneas. Recordemos los posibles estilos de línea:
Estilo | Descripción |
---|---|
Sólido | Las líneas serán continuas y sólidas. |
Trazos | Líneas de trazos. |
Puntos | Líneas de puntos. |
Trazo y punto | Líneas alternan puntos y trazos. |
Trazo, punto, punto | Líneas alternan líneas y dobles puntos. |
Nulo | Las líneas son invisibles. |
Dentro de marco | Las líneas serán sólidas. Sólo en el caso de plumas geométricas, y cuando se usan con funciones que requieran un rectángulo que sirva como límite, las dimensiones de la figura se reducirán para que se ajusten por completo al interior del rectángulo, teniendo en cuenta el grosor de la pluma. |
En el caso de las plumas geométricas, los estilos no sólidos no están limitados a un pixel, como en el caso de las plumas cosméticas. Además, existe otro estilo posible, en el que el usuario puede definir las longitudes de los trazos y las separaciones.
Color
Especifica el color de la pluma. Se puede usar una estructura COLORREF para indicar el color.
Patrón
Especifica un patrón de mapa de bits que se repite en el trazo. Uno de los patrones es el de rayado, que puede ser cualquiera de los seis predefinidos. Pero también se pueden usar patrones creados a partir de cualquier mapa de bits de 8x8 pixels, patrones vacíos o sólidos.
Rayado
El rayado es un tipo particular de patrón. Normalmente nos referiremos a los rayados predefinidos, que son seis, como vimos en el capítulo de plumas:
Valor | Significado |
---|---|
Diagonal descendente | Trama de líneas diagonales a 45º descendentes de izquierda a derecha. |
Cruz | Trama de líneas horizontales y verticales. |
Cruz diagonal | Trama de líneas diagonales a 45º cruzadas. |
Diagonal ascendente | Trama de líneas diagonales a 45º ascendentes de izquierda a derecha. |
Horizontal | Trama de líneas horizontales. |
Vertical | Trama de líneas verticales. |
Estilo de final (tapón)
Los extremos de las líneas pueden ser de diferentes tipos. Para las plumas geométricas tenemos tres posibles valores:
Valor | Significado |
---|---|
Redondeado | Las líneas terminan con un semicírculo. |
Cuadrado | Las líneas terminan con medio cuadrado. |
Plano | Las líneas terminan de forma abrupta. |
Por ejemplo, estas líneas fueron trazadas con estos tres estilos de final.
Estilo de unión
Para las uniones de distintas líneas de una figura cerrada también disponemos de tres estilos. Estos estilos no se aplican a líneas unidas que no formen parte de una línea poligonal o de una figura cerrada:
Valor | Significado |
---|---|
Redondeado | Las esquinas se redondean. |
Picudas (miter) | Las esquinas se dejan sin recortar ni redondear. |
Biseladas (Bevel) | Las puntas de las esquinas se cortan a bisel. |
Por ejemplo, estas figuras fueron trazadas con estos tres estilos de final. La azul con el estilo redondeado, la verde picuda y la roja viselada:
Crear una pluma geométrica
Para crear plumas geométricas se usa la función ExtCreatePen:
HPEN pluma; LOGBRUSH lb = {BS_SOLID, RGB(240, 0, 0), 0}; pluma = ExtCreatePen( PS_GEOMETRIC | PS_DASH | PS_ENDCAP_ROUND | PS_JOIN_ROUND, 15, &lb, 0, NULL);
Como estas plumas pueden usar atributos de pincel para el trazado, necesitamos suministrar una estructura LOGBRUSH para definir el estilo y color de la pluma.
Seleccionar una pluma geométrica
No hay diferencia, a la hora de usarlas, entre las plumas geométricas y las cosméticas. En ambos casos, y como sucede con el resto de los objetos del GDI, se usa la función SelectObject:
SelectObject(hdc, pluma); MoveToEx(hdc, 30, 30, NULL); LineTo(hdc, 400, 30);
Destruir una pluma geométrica
Y, por supuesto, cuando ya no necesitemos una pluma geométrica, deberemos destruirla y liberar los recursos que consume, usando la función DeleteObject:
DeleteObject(pluma);
Ejemplo 30
Nombre | Fichero | Fecha | Tamaño | Contador | Descarga |
---|---|---|---|---|---|
Ejemplo 30 | win030.zip | 2004-06-18 | 3398 bytes | 713 |