Поделиться через


Класс CBrush

Инкапсулирует кисть интерфейса графических устройств Windows (GDI).

Синтаксис

class CBrush : public CGdiObject

Участники

Открытые конструкторы

Имя Описание
CBrush::CBrush Формирует объект CBrush.

Открытые методы

Имя Описание
CBrush::CreateBrushIndirect Инициализирует кисть с помощью стиля, цвета и шаблона, указанного LOGBRUSH в структуре.
CBrush::CreateDIBPatternBrush Инициализирует кисть с шаблоном, заданным независимым от устройства растровым изображением (DIB).
CBrush::CreateHatchBrush Инициализирует кисть с заданным хэтчовым шаблоном и цветом.
CBrush::CreatePatternBrush Инициализирует кисть с шаблоном, заданным растровым изображением.
CBrush::CreateSolidBrush Инициализирует кисть с указанным сплошным цветом.
CBrush::CreateSysColorBrush Создает кисть, которая является цветом системы по умолчанию.
CBrush::FromHandle Возвращает указатель на CBrush объект при указании дескриптора объекту Windows HBRUSH .
CBrush::GetLogBrush Возвращает структуру LOGBRUSH .

Открытые операторы

Имя Описание
CBrush::operator HBRUSH Возвращает дескриптор Windows, подключенный к объекту CBrush .

Замечания

Чтобы использовать CBrush объект, создайте объект и передайте CBrush его в любую функцию-член CDC , требующую кисть.

Кисти могут быть твердыми, вылупленными или узорчатыми.

Дополнительные сведения см. в CBrushразделе "Графические объекты".

Иерархия наследования

CObject

CGdiObject

CBrush

Требования

Заголовок: afxwin.h

CBrush::CBrush

Формирует объект CBrush.

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

Параметры

crColor
Задает цвет переднего плана кисти как цвет RGB. Если кисть вылупится, этот параметр указывает цвет штриховки.

nIndex
Задает стиль люка кисти. Это может быть любое из следующих значений:

  • HS_BDIAGONAL Нисходящий люк (слева направо) в 45 градусов

  • HS_CROSS Горизонтальное и вертикальное перекрестие

  • HS_DIAGCROSS Перекрестие на 45 градусов

  • HS_FDIAGONAL Вверх люк (слева направо) в 45 градусов

  • HS_HORIZONTAL Горизонтальный люк

  • HS_VERTICAL Вертикальный люк

pBitmap
Указывает на объект, указывающий CBitmap растровое изображение, с помощью которого красит кисть.

Замечания

CBrush имеет четыре перегруженных конструктора. Конструктор без аргументов создает неинициализированный CBrush объект, который необходимо инициализировать до его использования.

При использовании конструктора без аргументов необходимо инициализировать результирующий CBrush объект с помощью CreateSolidBrush, , CreateHatchBrushили CreatePatternBrushCreateBrushIndirectCreateDIBPatternBrush. Если вы используете один из конструкторов, которые принимают аргументы, то дальнейшая инициализация не требуется. Конструкторы с аргументами могут вызвать исключение при обнаружении ошибок, а конструктор без аргументов всегда будет выполнен успешно.

Конструктор с одним COLORREF параметром создает сплошную кисть с указанным цветом. Цвет задает значение RGB и может быть создан с помощью RGB макроса в WINDOWS.H.

Конструктор с двумя параметрами создает кисть хэтча. Параметр nIndex задает индекс хэтчированного шаблона. Параметр crColor задает цвет.

Конструктор с параметром CBitmap создает шаблонную кисть. Параметр определяет растровое изображение. Предполагается, что растровое изображение было создано с помощью CBitmap::CreateBitmap, CBitmap::CreateBitmapIndirectили CBitmap::LoadBitmapCBitmap::CreateCompatibleBitmap. Минимальный размер растрового изображения, используемого в шаблоне заливки, составляет 8 пикселей на 8 пикселей.

Пример

// 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

Инициализирует кисть со стилем, цветом и шаблоном LOGBRUSH , указанными в структуре.

BOOL CreateBrushIndirect(const LOGBRUSH* lpLogBrush);

Параметры

lpLogBrush
Указывает на LOGBRUSH структуру, содержащую сведения о кисти.

Возвращаемое значение

Ненулевое значение, если функция выполнена успешно; в противном случае — 0.

Замечания

Затем кисть можно выбрать в качестве текущей кисти для любого контекста устройства.

Кисть, созданная с помощью монохромного изображения (1 плоскости, 1 бит на пиксель), рисуется с помощью текущего текста и фоновых цветов. Пиксели, представленные битовым значением 0, будут нарисованы с текущим цветом текста. Пиксели, представленные битовым набором 1, будут нарисованы с текущим цветом фона.

Пример

// 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

Инициализирует кисть с шаблоном, заданным независимым от устройства растровым изображением (DIB).

BOOL CreateDIBPatternBrush(
    HGLOBAL hPackedDIB,
    UINT nUsage);

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

Параметры

hPackedDIB
Определяет объект глобальной памяти, содержащий упакованную независимую от устройства растровую карту (DIB).

nUsage
Указывает, содержат ли bmiColors[] поля BITMAPINFO структуры данных (часть упакованного DIB) явные значения RGB или индексы в текущей логической палитре. Параметр должен быть одним из следующих значений:

  • DIB_PAL_COLORS Таблица цветов состоит из массива 16-разрядных индексов.

  • DIB_RGB_COLORS Таблица цветов содержит литеральные значения RGB.

lpPackedDIB
Указывает на упакованный DIB, состоящий из BITMAPINFO структуры сразу после массива байтов, определяющих пиксели растрового изображения.

Возвращаемое значение

Имеет ненулевое значение в случае успешного выполнения, иначе — 0.

Замечания

Затем кисть можно выбрать для любого контекста устройства, поддерживающего операции растра.

Две версии отличаются по способу обработки DIB:

  • В первой версии для получения дескриптора в DIB вы вызываете функцию Windows GlobalAlloc , чтобы выделить блок глобальной памяти, а затем заполнить память упакованным DIB.

  • Во второй версии не требуется вызывать GlobalAlloc выделение памяти для упакованного DIB.

Упакованный BITMAPINFO DIB состоит из структуры данных сразу после массива байтов, определяющих пиксели растрового изображения. Растровые изображения, используемые в качестве шаблонов заливки, должны составлять 8 пикселей на 8 пикселей. Если растровое изображение больше, Windows создает шаблон заливки, используя только биты, соответствующие первым 8 строкам и 8 столбцам пикселей в левом верхнем углу растрового изображения.

Если приложение выбирает двухцветную кисть шаблона DIB в контексте монохромного устройства, Windows игнорирует цвета, указанные в DIB, и вместо этого отображает кисть шаблона с использованием текущего текста и фона контекста устройства. Пиксели, сопоставленные с первым цветом (смещение 0 в таблице цветов DIB), отображаются с помощью текстового цвета. Пиксели, сопоставленные со вторым цветом (смещение 1 в таблице цветов) отображаются с помощью цвета фона.

Сведения об использовании следующих функций Windows см. в пакете SDK для Windows:

  • CreateDIBPatternBrush (Эта функция предоставляется только для совместимости с приложениями, написанными для версий Windows до версии 3.0; используйте функцию CreateDIBPatternBrushPt .)

  • CreateDIBPatternBrushPt (Эта функция должна использоваться для приложений на основе Win32.)

  • GlobalAlloc

Пример

// 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

Инициализирует кисть с заданным хэтчовым шаблоном и цветом.

BOOL CreateHatchBrush(
    int nIndex,
    COLORREF crColor);

Параметры

nIndex
Задает стиль люка кисти. Это может быть любое из следующих значений:

  • HS_BDIAGONAL Нисходящий люк (слева направо) в 45 градусов

  • HS_CROSS Горизонтальное и вертикальное перекрестие

  • HS_DIAGCROSS Перекрестие на 45 градусов

  • HS_FDIAGONAL Вверх люк (слева направо) в 45 градусов

  • HS_HORIZONTAL Горизонтальный люк

  • HS_VERTICAL Вертикальный люк

crColor
Задает цвет переднего плана кисти как цвет RGB (цвет хэтчов). Дополнительные сведения см COLORREF . в пакете SDK для Windows.

Возвращаемое значение

Имеет ненулевое значение в случае успешного выполнения, иначе — 0.

Замечания

Затем кисть можно выбрать в качестве текущей кисти для любого контекста устройства.

Пример

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

Инициализирует кисть с шаблоном, заданным растровым изображением.

BOOL CreatePatternBrush(CBitmap* pBitmap);

Параметры

pBitmap
Определяет растровое изображение.

Возвращаемое значение

Имеет ненулевое значение в случае успешного выполнения, иначе — 0.

Замечания

Затем кисть можно выбрать для любого контекста устройства, поддерживающего операции растра. Растровое изображение, определяемое pBitmap как правило, инициализируется с помощью CBitmap::CreateBitmapфункции , CBitmap::CreateBitmapIndirectCBitmap::LoadBitmapили CBitmap::CreateCompatibleBitmap функции.

Растровые изображения, используемые в качестве шаблонов заливки, должны составлять 8 пикселей на 8 пикселей. Если растровое изображение больше, Windows будет использовать только биты, соответствующие первым 8 строкам и столбцам пикселей в левом верхнем углу растрового изображения.

Кисть шаблона можно удалить, не затрагивая связанное растровое изображение. Это означает, что растровое изображение можно использовать для создания любого количества кистей шаблонов.

Кисть, созданная с помощью монохромной растровой карты (1 цветовая плоскость, 1 бит на пиксель), рисуется с помощью текущих цветов текста и фона. Пиксели, представленные битовым значением 0, рисуются с текущим цветом текста. Пиксели, представленные битовым набором 1, рисуются с текущим цветом фона.

Сведения об использовании CreatePatternBrushфункции Windows см. в пакете SDK для Windows.

Пример

// 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

Инициализирует кисть с заданным сплошным цветом.

BOOL CreateSolidBrush(COLORREF crColor);

Параметры

crColor
Структура COLORREF , указывающая цвет кисти. Цвет задает значение RGB и может быть создан с помощью RGB макроса в WINDOWS.H.

Возвращаемое значение

Имеет ненулевое значение в случае успешного выполнения, иначе — 0.

Замечания

Затем кисть можно выбрать в качестве текущей кисти для любого контекста устройства.

После завершения использования кисти, созданной с помощью CreateSolidBrushкисти, она должна выбрать кисть из контекста устройства.

Пример

Пример см. в примере CBrush::CBrush.

CBrush::CreateSysColorBrush

Инициализирует цвет кисти.

BOOL CreateSysColorBrush(int nIndex);

Параметры

nIndex
Задает цветовый индекс. Это значение соответствует цвету, используемому для рисования одного из 21 элементов окна. Ознакомьтесь GetSysColor со списком значений в пакете SDK для Windows.

Возвращаемое значение

Имеет ненулевое значение в случае успешного выполнения, иначе — 0.

Замечания

Затем кисть можно выбрать в качестве текущей кисти для любого контекста устройства.

После завершения использования кисти, созданной с помощью CreateSysColorBrushкисти, она должна выбрать кисть из контекста устройства.

Пример

// 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

Возвращает указатель на CBrush объект при указании дескриптора объекту Windows HBRUSH .

static CBrush* PASCAL FromHandle(HBRUSH hBrush);

Параметры

hBrush
Дескриптор кисти Windows GDI.

Возвращаемое значение

Указатель на объект в случае успешного CBrush выполнения; в противном случае NULL.

Замечания

CBrush Если объект еще не присоединен к дескрипторуCBrush, создается и присоединяется временный объект. Этот временный объект действителен только в следующий раз, когда приложение имеет время простоя CBrush в цикле событий. В настоящее время удаляются все временные графические объекты. Другими словами, временный объект действителен только во время обработки одного сообщения окна.

Дополнительные сведения об использовании графических объектов см. в статье "Графические объекты " в пакете SDK для Windows.

Пример

См. пример CBrush ::CBrush.

CBrush::GetLogBrush

Вызовите эту функцию-член, чтобы получить структуру LOGBRUSH .

int GetLogBrush(LOGBRUSH* pLogBrush);

Параметры

pLogBrush
Указывает на LOGBRUSH структуру, содержащую сведения о кисти.

Возвращаемое значение

Если функция успешно выполнена и pLogBrush является допустимым указателем, возвращаемое значение является числом байтов, хранящихся в буфере.

Если функция выполнена успешно, а pLogBrush NULLвозвращаемое значение — это количество байтов, необходимых для хранения сведений, которые функция будет хранить в буфере.

Если функция завершается ошибкой, возвращаемое значение равно 0.

Замечания

Структура LOGBRUSH определяет стиль, цвет и шаблон кисти.

Например, вызов GetLogBrush для сопоставления определенного цвета или шаблона растрового изображения.

Пример

// 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

Используйте этот оператор для получения присоединенного дескриптора CBrush GDI Windows объекта.

operator HBRUSH() const;

Возвращаемое значение

В случае успешного выполнения дескриптор объекта GDI Windows, представленного CBrush объектом; в противном случае NULL.

Замечания

Этот оператор является оператором приведения, который поддерживает прямое использование HBRUSH объекта.

Дополнительные сведения об использовании графических объектов см. в статье "Графические объекты " в пакете SDK для Windows.

Пример

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);

См. также

Пример MFC PROPDLG
CGdiObject Класс
Диаграмма иерархии
CBitmap Класс
CDC Класс