Класс 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
разделе "Графические объекты".
Иерархия наследования
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
или CreatePatternBrush
CreateBrushIndirect
CreateDIBPatternBrush
. Если вы используете один из конструкторов, которые принимают аргументы, то дальнейшая инициализация не требуется. Конструкторы с аргументами могут вызвать исключение при обнаружении ошибок, а конструктор без аргументов всегда будет выполнен успешно.
Конструктор с одним COLORREF
параметром создает сплошную кисть с указанным цветом. Цвет задает значение RGB и может быть создан с помощью RGB
макроса в WINDOWS.H
.
Конструктор с двумя параметрами создает кисть хэтча. Параметр nIndex
задает индекс хэтчированного шаблона. Параметр crColor
задает цвет.
Конструктор с параметром CBitmap
создает шаблонную кисть. Параметр определяет растровое изображение. Предполагается, что растровое изображение было создано с помощью CBitmap::CreateBitmap
, CBitmap::CreateBitmapIndirect
или CBitmap::LoadBitmap
CBitmap::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.)
Пример
// 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::CreateBitmapIndirect
CBitmap::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
Класс