Clase CBrush

Encapsula un pincel de la Interfaz de dispositivo gráfico (GDI) de Windows.

Sintaxis

class CBrush : public CGdiObject

Miembros

Constructores públicos

Nombre Descripción
CBrush::CBrush Construye un objeto CBrush.

Métodos públicos

Nombre Descripción
CBrush::CreateBrushIndirect Inicializa un pincel con el estilo, el color y el patrón especificados en una estructura LOGBRUSH.
CBrush::CreateDIBPatternBrush Inicializa un pincel con un patrón especificado por un mapa de bits independiente del dispositivo (DIB).
CBrush::CreateHatchBrush Inicializa un pincel con el color y el patrón sombreado especificados.
CBrush::CreatePatternBrush Inicializa un pincel con un patrón especificado por un mapa de bits.
CBrush::CreateSolidBrush Inicializa un pincel con el color sólido especificado.
CBrush::CreateSysColorBrush Crea un pincel que es el color predeterminado del sistema.
CBrush::FromHandle Devuelve un puntero que apunta a un objeto CBrush cuando se especifica el manipulador de control de un objeto HBRUSH de Windows.
CBrush::GetLogBrush Obtiene una estructura LOGBRUSH.

Operadores públicos

Nombre Descripción
CBrush::operator HBRUSH Devuelve el controlador de Windows asociado al objeto CBrush.

Comentarios

Para usar un objeto CBrush, construya un objeto CBrush y páselo a cualquier función miembro CDC que requiera un pincel.

Los pinceles pueden ser sólidos, sombreados o con patrones.

Para más información sobre la clase CBrush, consulte Objetos gráficos.

Jerarquía de herencia

CObject

CGdiObject

CBrush

Requisitos

Encabezadoafxwin.h:

CBrush::CBrush

Construye un objeto CBrush.

CBrush();
CBrush(COLORREF crColor);
CBrush(int nIndex, COLORREF crColor);
explicit CBrush(CBitmap* pBitmap);

Parámetros

crColor
Especifica el color de primer plano del pincel como un color RGB. Si el pincel está sombreado, este parámetro especifica el color del sombreado.

nIndex
Especifica el estilo de sombreado del pincel. Puede tener cualquiera de los valores siguientes:

  • HS_BDIAGONAL Sombreado descendente (de izquierda a derecha) en 45 grados

  • HS_CROSS Símbolo de número horizontal y vertical

  • HS_DIAGCROSS Símbolo de número en 45 grados

  • HS_FDIAGONAL Sombreado ascendente (de izquierda a derecha) en 45 grados

  • HS_HORIZONTAL Sombreado horizontal

  • HS_VERTICAL Sombreado vertical

pBitmap
Apunta a un objeto CBitmap que especifica un mapa de bits con el que pinta el pincel.

Comentarios

CBrush tiene cuatro constructores sobrecargados. El constructor sin argumentos crea un objeto CBrush no inicializado que se debe inicializar antes de poder usarlo.

Si usa el constructor sin argumentos, debe inicializar el objeto CBrush resultante con CreateSolidBrush, CreateHatchBrush, CreateBrushIndirect, CreatePatternBrush o CreateDIBPatternBrush. Si usa uno de los constructores que toma argumentos, no es necesario realizar ninguna inicialización adicional. Los constructores con argumentos pueden producir una excepción si se encuentran errores, mientras que el constructor sin argumentos siempre se realizará correctamente.

El constructor con un parámetro COLORREF único construye un pincel sólido con el color especificado. El color especifica un valor RGB y se puede construir con la macro RGB en WINDOWS.H.

El constructor con dos parámetros crea un pincel de sombreado. El parámetro nIndex especifica el índice de un patrón sombreado. El parámetro crColor especifica el color.

El constructor con un parámetro CBitmap crea un pincel con patrón. El parámetro identifica un mapa de bits. Se presupone que el mapa de bits se creó mediante el uso de CBitmap::CreateBitmap, CBitmap::CreateBitmapIndirect, CBitmap::LoadBitmap o CBitmap::CreateCompatibleBitmap. El tamaño mínimo de un mapa de bits que se va a usar en un patrón de relleno es de 8 píxeles por 8 píxeles.

Ejemplo

// CBrush::CBrush.
CBrush brush1;                           // Must initialize!
brush1.CreateSolidBrush(RGB(0, 0, 255)); // Blue brush.

CRect rc;
GetClientRect(&rc);
ScreenToClient(&rc);

// Save original brush.
CBrush *pOrigBrush = (CBrush *)pDC->SelectObject(&brush1);

// Paint upper left corner with blue brush.
pDC->Rectangle(0, 0, rc.Width() / 2, rc.Height() / 2);

// These constructors throw resource exceptions.
try
{
   // CBrush::CBrush(COLORREF crColor)
   CBrush brush2(RGB(255, 0, 0)); // Solid red brush.

   // CBrush::CBrush(int nIndex, COLORREF crColor)
   // Hatched green brush.
   CBrush brush3(HS_DIAGCROSS, RGB(0, 255, 0));

   // CBrush::CBrush(CBitmap* pBitmap)
   CBitmap bmp;
   // Load a resource bitmap.
   bmp.LoadBitmap(IDB_BRUSH);
   CBrush brush4(&bmp);

   pDC->SelectObject(&brush2);

   // Paint upper right corner with red brush.
   pDC->Rectangle(rc.Width() / 2, 0, rc.Width(),
                  rc.Height() / 2);

   pDC->SelectObject(&brush3);

   // Paint lower left corner with green hatched brush.
   pDC->Rectangle(0, rc.Height() / 2, rc.Width() / 2,
                  rc.Height());

   pDC->SelectObject(&brush4);

   // Paint lower right corner with resource brush.
   pDC->Rectangle(rc.Width() / 2, rc.Height() / 2,
                  rc.Width(), rc.Height());
}
catch (CResourceException *e)
{
   e->ReportError();
   e->Delete();
}

// Reselect original brush into device context.
pDC->SelectObject(pOrigBrush);

CBrush::CreateBrushIndirect

Inicializa un pincel con un estilo, un color y un patrón especificados en una estructura LOGBRUSH.

BOOL CreateBrushIndirect(const LOGBRUSH* lpLogBrush);

Parámetros

lpLogBrush
Apunta a una estructura LOGBRUSH que contiene información sobre el pincel.

Valor devuelto

Es distinto de cero si la función se realiza correctamente; de lo contrario, es 0.

Comentarios

Posteriormente, el pincel se puede seleccionar como el pincel actual para cualquier contexto de dispositivo.

Un pincel creado con un mapa de bits monocromo (1 plano, 1 bit por píxel) se dibuja con el texto actual y los colores de fondo. Los píxeles representados por un bit establecido en 0 se dibujarán con el color de texto actual. Los píxeles representados por un bit establecido en 1 se dibujarán con el color de fondo actual.

Ejemplo

// Initialize a LOGBRUSH structure.
LOGBRUSH logBrush;
logBrush.lbStyle = BS_HATCHED;
logBrush.lbColor = RGB(0, 192, 192);
logBrush.lbHatch = HS_CROSS;

// Declare an uninitialized CBrush ...
CBrush brush;
// ... and initialize it with the LOGBRUSH.
brush.CreateBrushIndirect(&logBrush);

// Select the brush (and perhaps a pen) into
// the device context.
CBrush *pOldBrush = (CBrush *)pDC->SelectObject(&brush);
CPen *pOldPen = (CPen *)pDC->SelectStockObject(BLACK_PEN);

// Have fun!
pDC->Pie(CRect(100, 100, 300, 300), CPoint(0, 0), CPoint(50, 200));

// Restore the original device context objects.
pDC->SelectObject(pOldBrush);
pDC->SelectObject(pOldPen);

CBrush::CreateDIBPatternBrush

Inicializa un pincel con el patrón especificado por un mapa de bits independiente del dispositivo (DIB).

BOOL CreateDIBPatternBrush(
    HGLOBAL hPackedDIB,
    UINT nUsage);

BOOL CreateDIBPatternBrush(
    const void* lpPackedDIB,
    UINT nUsage);

Parámetros

hPackedDIB
Identifica un objeto de memoria global que contiene un mapa de bits independiente del dispositivo (DIB) empaquetado.

nUsage
Especifica si los campos bmiColors[] de la estructura de datos BITMAPINFO (parte del "DIB empaquetado") contiene índices o valores RGB explícitos en la paleta lógica implementada actualmente. El parámetro debe ser uno de los siguientes valores :

  • DIB_PAL_COLORS La tabla de colores consta de una matriz de índices de 16 bits.

  • DIB_RGB_COLORS La tabla de colores contiene valores RGB literales.

lpPackedDIB
Apunta a un DIB empaquetado que consta de una estructura BITMAPINFO inmediatamente seguida de una matriz de bytes que define los píxeles del mapa de bits.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

Posteriormente, el pincel se puede seleccionar para cualquier contexto de dispositivo que admita operaciones de trama.

Las dos versiones difieren en la forma en que se controla la DIB:

  • En la primera versión, para obtener un manipulador de control para el DIB, llame a la función GlobalAlloc de Windows para asignar un bloque de memoria global y, luego, rellene la memoria con el DIB empaquetado.

  • En la segunda versión, no es necesario llamar a GlobalAlloc para asignar memoria para el DIB empaquetado.

Un DIB empaquetado consta de una estructura de datos BITMAPINFO inmediatamente seguida de la matriz de bytes que define los píxeles del mapa de bits. Los mapas de bits usados como patrones de relleno deben ser de 8 píxeles por 8 píxeles. Si el mapa de bits es más grande, Windows crea un patrón de relleno con solo los bits correspondientes a las primeras 8 filas y 8 columnas de píxeles en la esquina superior izquierda del mapa de bits.

Cuando una aplicación selecciona un pincel de patrón DIB de dos colores en un contexto de dispositivo monocromático, Windows pasa por alto los colores que se especifican en DIB y, en su lugar, muestra el pincel de patrón mediante el texto actual y los colores de fondo del contexto del dispositivo. Los píxeles asignados al primer color (en el desplazamiento 0 de la tabla de colores DIB) del DIB se muestran con el color de texto. Los píxeles asignados al segundo color (en el desplazamiento 1 de la tabla de colores) se muestran con el color de fondo.

Para información sobre el uso de las funciones de Windows siguientes, consulte Windows SDK:

  • CreateDIBPatternBrush (Esta función solo se proporciona para la compatibilidad con aplicaciones escritas para versiones de Windows anteriores a 3.0; use la función CreateDIBPatternBrushPt).

  • CreateDIBPatternBrushPt (Se debe usar esta función para las aplicaciones basadas en Win32).

  • GlobalAlloc

Ejemplo

// Resource handle to bitmap.
HRSRC hRes;
// Global handles to bitmap resource.
HGLOBAL hData;
void *hLockedData;
CBrush brush;

// Find the resource handle.
hRes = ::FindResource(AfxGetResourceHandle(),
                      MAKEINTRESOURCE(IDB_BRUSH), RT_BITMAP);
if (hRes != NULL)
{
   // Lock and Load (or Load and Lock).
   if (((hData = ::LoadResource(AfxGetResourceHandle(),
                                hRes)) != NULL) &&
       ((hLockedData = ::LockResource(hData)) != NULL))
   {
      // Initialize the brush.
      brush.CreateDIBPatternBrush((const void *)hLockedData,
                                  DIB_RGB_COLORS);

      // Select the brush into the device context.
      CBrush *pOldBrush = pDC->SelectObject(&brush);

      // Draw.
      pDC->Rectangle(50, 50, 200, 200);

      // Restore the original device context.
      pDC->SelectObject(pOldBrush);

      // Free the resource.
      ::FreeResource(hLockedData);
   }
}

CBrush::CreateHatchBrush

Inicializa un pincel con el color y el patrón sombreado especificados.

BOOL CreateHatchBrush(
    int nIndex,
    COLORREF crColor);

Parámetros

nIndex
Especifica el estilo de sombreado del pincel. Puede tener cualquiera de los valores siguientes:

  • HS_BDIAGONAL Sombreado descendente (de izquierda a derecha) en 45 grados

  • HS_CROSS Símbolo de número horizontal y vertical

  • HS_DIAGCROSS Símbolo de número en 45 grados

  • HS_FDIAGONAL Sombreado ascendente (de izquierda a derecha) en 45 grados

  • HS_HORIZONTAL Sombreado horizontal

  • HS_VERTICAL Sombreado vertical

crColor
Especifica el color de primer plano del pincel como un color RGB (el color de los sombreados). Para obtener más información, consulte el método COLORREF en Windows SDK.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

Posteriormente, el pincel se puede seleccionar como el pincel actual para cualquier contexto de dispositivo.

Ejemplo

CBrush brush;
brush.CreateHatchBrush(HS_BDIAGONAL, RGB(255, 0, 0));

CBrush *pOldBrush;
CPen *pOldPen;

pOldBrush = (CBrush *)pDC->SelectObject(&brush);
pOldPen = (CPen *)pDC->SelectStockObject(NULL_PEN);
pDC->Ellipse(CRect(50, 50, 250, 250));

pDC->SelectObject(pOldBrush);
pDC->SelectObject(pOldPen);

CBrush::CreatePatternBrush

Inicializa un pincel con un patrón especificado por un mapa de bits.

BOOL CreatePatternBrush(CBitmap* pBitmap);

Parámetros

pBitmap
Identifica un mapa de bits.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

Posteriormente, el pincel se puede seleccionar para cualquier contexto de dispositivo que admita operaciones de trama. El mapa de bits que pBitmap identifica se suele iniciar mediante la función CBitmap::CreateBitmap, CBitmap::CreateBitmapIndirect, CBitmap::LoadBitmap o CBitmap::CreateCompatibleBitmap.

Los mapas de bits usados como patrones de relleno deben ser de 8 píxeles por 8 píxeles. Si el mapa de bits es más grande, Windows solo usará los bits correspondientes a las primeras 8 filas y columnas de píxeles en la esquina superior izquierda del mapa de bits.

Se puede eliminar un pincel de patrón sin afectar al mapa de bits asociado. Esto significa que el mapa de bits se puede usar para crear cualquier número de pinceles de patrón.

Un pincel creado con un mapa de bits monocromo (1 plano de color, 1 bit por píxel) se dibuja con el texto actual y los colores de fondo. Los píxeles representados por un bit establecido en 0 se dibujan con el color de texto actual. Los píxeles representados por un bit establecido en 1 se dibujan con el color de fondo actual.

Para información sobre el uso de CreatePatternBrush, una función de Windows, consulte Windows SDK.

Ejemplo

// Create a hatched bit pattern.
WORD HatchBits[8] = {0x11, 0x22, 0x44, 0x88, 0x11,
                     0x22, 0x44, 0x88};

// Use the bit pattern to create a bitmap.
CBitmap bm;
bm.CreateBitmap(8, 8, 1, 1, HatchBits);

// Create a pattern brush from the bitmap.
CBrush brush;
brush.CreatePatternBrush(&bm);

// Select the brush into a device context, and draw.
CBrush *pOldBrush = (CBrush *)pDC->SelectObject(&brush);
pDC->RoundRect(CRect(50, 50, 200, 200), CPoint(10, 10));

// Restore the original brush.
pDC->SelectObject(pOldBrush);

CBrush::CreateSolidBrush

Inicializa un pincel con un color sólido especificado.

BOOL CreateSolidBrush(COLORREF crColor);

Parámetros

crColor
Estructura COLORREF que especifica el color del pincel. El color especifica un valor RGB y se puede construir con la macro RGB en WINDOWS.H.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

Posteriormente, el pincel se puede seleccionar como el pincel actual para cualquier contexto de dispositivo.

Cuando una aplicación haya terminado de usar el pincel creado por CreateSolidBrush, debe seleccionar el pincel desde el contexto de dispositivo.

Ejemplo

Vea el ejemplo de CBrush::CBrush.

CBrush::CreateSysColorBrush

Inicializa un color de pincel.

BOOL CreateSysColorBrush(int nIndex);

Parámetros

nIndex
Especifica un índice de color. Este valor corresponde al color que se utiliza para pintar uno de los 21 elementos de la ventana. Para una lista de valores, consulte GetSysColor en Windows SDK.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

Posteriormente, el pincel se puede seleccionar como el pincel actual para cualquier contexto de dispositivo.

Cuando una aplicación haya terminado de usar el pincel creado por CreateSysColorBrush, debe seleccionar el pincel desde el contexto de dispositivo.

Ejemplo

// Declare a CBrush and initialize to a system color.
CBrush brush;
brush.CreateSysColorBrush(COLOR_BTNFACE);

// Select the brush into the device context.
CBrush *pOldBrush = (CBrush *)pDC->SelectObject(&brush);

// Draw.
CRect rect(50, 50, 150, 150);
pDC->Rectangle(rect);

// Reselect the original brush.
pDC->SelectObject(pOldBrush);

CBrush::FromHandle

Devuelve un puntero que apunta a un objeto CBrush cuando se especifica el manipulador de control de un objeto HBRUSH de Windows.

static CBrush* PASCAL FromHandle(HBRUSH hBrush);

Parámetros

hBrush
HANDLE de un pincel GDI de Windows.

Valor devuelto

Un puntero a un objeto CBrush si se realiza correctamente; de lo contrario, NULL.

Comentarios

Si no hay un objeto CBrush ya asociado al identificador, se crea y asocia un objeto CBrush temporal. Este objeto temporal CBrush solo es válido hasta la próxima vez que la aplicación tenga tiempo de inactividad en su bucle de eventos. En este momento, se eliminan todos los objetos gráficos temporales. En otras palabras, el objeto temporal solo es válido durante el procesamiento de un mensaje de ventana.

Para más información sobre el uso de objetos gráficos, consulte Objetos gráficos en Windows SDK.

Ejemplo

Consulte el ejemplo de CBrush::CBrush.

CBrush::GetLogBrush

Llame a esta función miembro para recuperar la estructura LOGBRUSH.

int GetLogBrush(LOGBRUSH* pLogBrush);

Parámetros

pLogBrush
Apunta a una estructura LOGBRUSH que contiene información sobre el pincel.

Valor devuelto

Si la función se ejecuta correctamente y pLogBrush es un puntero válido, el valor devuelto es el número de bytes almacenados en el búfer.

Si la función se ejecuta correctamente y pLogBrush es NULL, el valor devuelto es el número de bytes necesarios para contener la información que la función almacenaría en el búfer.

Si se produce un error en la función, el valor devuelto es 0.

Comentarios

La estructura LOGBRUSH define el estilo, el color y el patrón de un pincel.

Por ejemplo, llame a GetLogBrush para que coincida con el color o patrón concretos de un mapa de bits.

Ejemplo

// Example for CBrush::GetLogBrush
LOGBRUSH logbrush;
brushExisting.GetLogBrush(&logbrush);
CBrush brushOther(logbrush.lbColor);

// Another example
// Declare a LOGBRUSH
LOGBRUSH logBrush;

// Using a bitmap for this example.
// The bitmap should be a project resource.
CBitmap bm;
bm.LoadBitmap(IDB_BRUSH);

try
{
   // Create a brush
   CBrush brush1(&bm);

   // Use GetLogBrush to fill the LOGBRUSH structure
   brush1.GetLogBrush(&logBrush);

   // Create a second brush using the LOGBRUSH data
   CBrush brush2;
   brush2.CreateBrushIndirect(&logBrush);

   // Use the first brush
   CBrush *pOldBrush = (CBrush *)pDC->SelectObject(&brush1);
   pDC->Rectangle(CRect(50, 50, 150, 150));

   // The second brush has the specified characteristics
   // of the first brush
   pDC->SelectObject(&brush2);
   pDC->Ellipse(200, 50, 300, 150);

   // Reselect the original brush
   pDC->SelectObject(pOldBrush);
}
catch (CResourceException *e)
{
   e->ReportError();
   e->Delete();
}

CBrush::operator HBRUSH

Use este operador para obtener el identificador GDI de Windows adjunto del CBrush objeto.

operator HBRUSH() const;

Valor devuelto

Si se ejecuta correctamente, un manipulador del objeto de la GDI de Windows representado por el objeto CBrush; de lo contrario, NULL.

Comentarios

Este operador es un operador de conversión que admite el uso directo de un objeto HBRUSH.

Para más información sobre el uso de objetos gráficos, consulte Objetos gráficos en Windows SDK.

Ejemplo

RECT rc = {50, 50, 200, 200};

Rectangle(pDC->GetSafeHdc(), rc.left, rc.top, rc.right, rc.bottom);

// The Win32 call to FillRect requires an HBRUSH.
// The HBRUSH operator casts the CBrush object
// to the required type.
CBrush brush;
brush.CreateSysColorBrush(COLOR_BTNFACE);
FillRect(pDC->GetSafeHdc(), &rc, (HBRUSH)brush);

Consulte también

Ejemplo de MFCPROPDLG
CGdiObject (clase)
Gráfico de jerarquías
CBitmap (clase)
CDC (clase)