20 Objetos básicos del GDI:
El pincel (Brush)
El pincel se utiliza para rellenar superficies y figuras cerradas. En este capítulo veremos cómo crearlos, seleccionarlos y destruirlos, y cómo elegir el estilo, textura y color para un pincel.
Al igual que vimos con las plumas, el proceso con todos los objetos es siempre el mismo, hay que crearlos, seleccionarlos y, cuando ya no se necesiten, destruirlos.
Pinceles lógicos
Existen cuatro tipos distintos de pinceles lógicos.
- Sólidos, consisten en un único color continuo.
- Stock, pinceles predefinidos por el sistema.
- Hatch, tramas de líneas.
- Patrones, consisten en mapas de bits.
Pinceles sólidos
Son los más simples, se usan para rellenar superficies con un único color uniforme. Para crear uno de estos pinceles se usa la función CreateSolidBrush, que sólo requiere que se especifique el color del pincel.
Pinceles de Stock
Del mismo modo que sucede con las plumas, también disponemos de un juego de pinceles de stock que podremos usar en nuestros programas.
En el caso de los objetos de stock, no es necesario crearlos ni destruirlos, siempre podemos obtener un manipulador y seleccionarlo para usarlo.
En el caso de los pinceles, existen siete en el stock:
Valor | Significado |
---|---|
BLACK_BRUSH | Pincel negra |
DKGRAY_BRUSH | Pincel gris oscuro |
GRAY_BRUSH | Pincel gris |
HOLLOW_BRUSH | Pincel hueco |
LTGRAY_BRUSH | Pincel gris claro |
NULL_BRUSH | Pincel nulo (equivale a HOLLOW_BRUSH) |
WHITE_BRUSH | Pincel blanco |
Ya vimos que para obtener un manipulador para una de esos objetos de stock se usa la función GetStockObject. Dependiendo del valor que usemos obtendremos un tipo de objeto diferente.
Pinceles de tramas (Hatch)
Consisten en tramas de líneas paralelas, que permiten crear superficies ralladas.
Para crear pinceles tramados se usa la función CreateHatchBrush. Además del color podemos escoger entre varias tramas distintas.
Existen seis tipos de tramas predefinidas, accesibles mediante constantes:
Valor | Significado |
---|---|
HS_BDIAGONAL | Trama de líneas diagonales a 45º descendentes de izquierda a derecha. |
HS_CROSS | Trama de líneas horizontales y verticales. |
HS_DIAGCROSS | Trama de líneas diagonales a 45º cruzadas. |
HS_FDIAGONAL | Trama de líneas diagonales a 45º ascendentes de izquierda a derecha. |
HS_HORIZONTAL | Trama de líneas horizontales. |
HS_VERTICAL | Trama de líneas verticales. |
Pinceles de patrones
Este tipo de pincel se crea a partir de un mapa de bits, así que en realidad puede ser cualquier tipo de imagen. Antes de poder crear uno de estos pinceles tendremos que disponer de un mapa de bits, que, como comentamos antes, es otro de los objetos de GDI que podemos manejar.
Supondremos que ya sabemos crear un objeto de mapa de bits, aunque explicaremos cómo hacerlo en próximos capítulos.
Para crear un pincel de patrón disponemos de tres funciones: CreatePatternBrush, CreateDIBPatternBrushPt y CreateDIBPatternBrush. La primera sólo requiere un manipulador de un mapa de bits. La segunda y la tercera permiten usar mapas de bits independientes del dispositivo, lo cual proporciona mayor control sobre la paleta de colores.
Para poder usar este tipo de pinceles hay que estar algo más familiarizado con los mapas de bits, volveremos sobre este tema cuando hayamos visto el objeto bitmap.
Crear un pincel
Además de las funciones mencionadas para crear pinceles de los distintos tipos lógicos mencionados, existe una función más para crear pinceles: CreateBrushIndirect.
Esta función sirve para crear pinceles lógicos, pero lo hace a través de una estructura LOGBRUSH, que almacena en su interior los parámetros necesarios para crear un pincel sólido, de trama o de patrón.
Seleccionar un pincel
Con los pinceles sucede lo mismo que con las plumas, aunque podemos tener de un repertorio de manipuladores de pincel, sólo puede haber uno activo en cada momento, para seleccionar el pincel activo se usa la función SelectObject.
Como ya hemos dicho el tipo de objeto seleccionado depende del parámetro que se pase a la función. El nuevo objeto seleccionado reemplaza al actual, y se devuelve el manipulador del objeto seleccionado anteriormente.
Se debe guardar el manipulador del pincel por defecto seleccionado antes de cambiarlo por primera vez, y restablecerlo antes de terminar el procedimiento de pintar.
Destruir un pincel
Por último, cuando ya no necesitemos más los manipuladores de pinceles, debemos destruirlos, con el fin de liberar la memoria usada para almacenarlos. Esto se hace mediante la función DeleteObject.
Ejemplo 18
Nombre | Fichero | Fecha | Tamaño | Contador | Descarga |
---|---|---|---|---|---|
Ejemplo 18 | win018.zip | 2004-01-18 | 2261 bytes | 783 |