다음을 통해 공유


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 Windows HBRUSH 개체에 대한 핸들이 CBrush 지정되면 개체에 대한 포인터를 반환합니다.
CBrush::GetLogBrush 구조를 가져옵니다 LOGBRUSH .

Public 연산자

속성 설명
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 에는 4개의 오버로드된 생성자가 있습니다. 인수가 없는 생성자는 초기화해야 사용할 수 있는 초기화 CBrush 되지 않은 개체를 생성합니다.

인수 없이 생성자를 사용하는 경우 , CreateHatchBrush, CreateBrushIndirectCreatePatternBrush또는 CreateDIBPatternBrush.를 사용하여 결과 개체CreateSolidBrushCBrush 초기화해야 합니다. 인수를 사용하는 생성자 중 하나를 사용하는 경우 더 이상 초기화가 필요하지 않습니다. 인수가 있는 생성자는 오류가 발생하는 경우 예외를 throw할 수 있지만 인수가 없는 생성자는 항상 성공합니다.

단일 COLORREF 매개 변수가 있는 생성자는 지정된 색으로 단색 브러시를 생성합니다. 색은 RGB 값을 지정하고 매크로를 RGB WINDOWS.H사용하여 생성할 수 있습니다.

두 개의 매개 변수가 있는 생성자는 해치 브러시를 생성합니다. 매개 변수는 nIndex 빗살 무늬 패턴의 인덱스를 지정합니다. 매개 변수는 crColor 색을 지정합니다.

매개 변수가 있는 CBitmap 생성자는 패턴 브러시를 생성합니다. 매개 변수는 비트맵을 식별합니다. 비트맵은 CBitmap::CreateBitmap, CBitmap::CreateBitmapIndirect또는 CBitmap::LoadBitmapCBitmap::CreateCompatibleBitmap. 채우기 패턴에서 사용할 비트맵의 최소 크기는 8픽셀 x 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 대한 정보가 포함된 구조를 가리킵니다.

Return Value

함수가 성공하면 0이 아니고 그렇지 않으면 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
데이터 구조의 BITMAPINFO 필드("압축된 DIB"의 일부)에 명시적 RGB 값 또는 인덱스가 현재 실현된 논리 팔레트에 포함되는지 여부를 bmiColors[] 지정합니다. 매개 변수는 다음 값 중 하나여야 합니다.

  • DIB_PAL_COLORS 색 테이블은 16비트 인덱스의 배열로 구성됩니다.

  • DIB_RGB_COLORS 색 테이블에는 리터럴 RGB 값이 포함됩니다.

lpPackedDIB
구조체로 구성된 BITMAPINFO 압축된 DIB를 가리킨 다음 비트맵의 픽셀을 정의하는 바이트 배열을 가리킵니다.

Return Value

성공하면 0이 아니고, 그렇지 않으면 0입니다.

설명

이후에 래스터 작업을 지원하는 모든 디바이스 컨텍스트에 대해 브러시를 선택할 수 있습니다.

두 버전은 DIB를 처리하는 방식과 다릅니다.

  • 첫 번째 버전에서 DIB에 대한 핸들을 얻으려면 Windows GlobalAlloc 함수를 호출하여 전역 메모리 블록을 할당한 다음 압축된 DIB로 메모리를 채웁니다.

  • 두 번째 버전에서는 압축된 DIB에 대한 메모리를 할당하기 위해 호출 GlobalAlloc 할 필요가 없습니다.

압축된 DIB는 BITMAPINFO 데이터 구조 바로 뒤에 비트맵의 픽셀을 정의하는 바이트 배열로 구성됩니다. 채우기 패턴으로 사용되는 비트맵은 8픽셀 x 8픽셀이어야 합니다. 비트맵이 더 큰 경우 Windows는 비트맵의 왼쪽 위 모서리에 있는 처음 8개 행과 8개의 픽셀 열에 해당하는 비트만 사용하여 채우기 패턴을 만듭니다.

애플리케이션이 단색 디바이스 컨텍스트로 2색 DIB 패턴 브러시를 선택하면 Windows는 DIB에 지정된 색을 무시하고 대신 디바이스 컨텍스트의 현재 텍스트 및 배경색을 사용하여 패턴 브러시를 표시합니다. DIB의 첫 번째 색(DIB 색 표의 오프셋 0)에 매핑된 픽셀은 텍스트 색을 사용하여 표시됩니다. 두 번째 색에 매핑된 픽셀(색 표의 오프셋 1)은 배경색을 사용하여 표시됩니다.

다음 Windows 함수를 사용하는 방법에 대한 자세한 내용은 Windows SDK를 참조하세요.

  • CreateDIBPatternBrush (이 함수는 3.0 이전 버전의 Windows용으로 작성된 애플리케이션과의 호환성을 위해서만 제공됩니다. 함수를 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 색(빗살 무늬의 색)으로 지정합니다. 자세한 내용은 Windows SDK를 참조 COLORREF 하세요.

Return Value

성공하면 0이 아니고, 그렇지 않으면 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
비트맵을 식별합니다.

Return Value

성공하면 0이 아니고, 그렇지 않으면 0입니다.

설명

이후에 래스터 작업을 지원하는 모든 디바이스 컨텍스트에 대해 브러시를 선택할 수 있습니다. 식별되는 pBitmap 비트맵은 일반적으로 , CBitmap::CreateBitmapIndirect또는 CBitmap::LoadBitmapCBitmap::CreateCompatibleBitmap 함수를 CBitmap::CreateBitmap사용하여 초기화됩니다.

채우기 패턴으로 사용되는 비트맵은 8픽셀 x 8픽셀이어야 합니다. 비트맵이 더 큰 경우 Windows는 비트맵의 왼쪽 위 모서리에 있는 처음 8개 행 및 픽셀 열에 해당하는 비트만 사용합니다.

연결된 비트맵에 영향을 주지 않고 패턴 브러시를 삭제할 수 있습니다. 즉, 비트맵을 사용하여 다양한 패턴 브러시를 만들 수 있습니다.

단색 비트맵(1 색 평면, 픽셀당 1비트)을 사용하여 만든 브러시는 현재 텍스트 및 배경색을 사용하여 그려집니다. 비트가 0으로 설정된 픽셀은 현재 텍스트 색으로 그려집니다. 비트가 1로 설정된 픽셀은 현재 배경색으로 그려집니다.

Windows 함수 사용에 CreatePatternBrush대한 자세한 내용은 Windows SDK를 참조하세요.

예시

// 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사용하여 생성할 수 있습니다.

Return Value

성공하면 0이 아니고, 그렇지 않으면 0입니다.

설명

이후에는 모든 디바이스 컨텍스트에 대한 현재 브러시로 브러시를 선택할 수 있습니다.

애플리케이션이 만든 CreateSolidBrush브러시 사용을 마쳤으면 디바이스 컨텍스트에서 브러시를 선택해야 합니다.

예시

CBrush::CBrush에 대한 예를 참조하세요.

CBrush::CreateSysColorBrush

브러시 색을 초기화합니다.

BOOL CreateSysColorBrush(int nIndex);

매개 변수

nIndex
색 인덱스를 지정합니다. 이 값은 21개의 창 요소 중 하나를 그리는 데 사용되는 색에 해당합니다. 값 목록은 Windows SDK를 참조 GetSysColor 하세요.

Return Value

성공하면 0이 아니고, 그렇지 않으면 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

Windows HBRUSH 개체에 대한 핸들이 CBrush 지정되면 개체에 대한 포인터를 반환합니다.

static CBrush* PASCAL FromHandle(HBRUSH hBrush);

매개 변수

hBrush
Windows GDI 브러시에 대한 HANDLE입니다.

Return Value

성공하면 개체에 대한 포인터입니다 CBrush . 그렇지 않으면 NULL.

설명

개체가 CBrush 핸들에 아직 연결되지 않은 경우 임시 CBrush 개체가 만들어지고 연결됩니다. 이 임시 CBrush 개체는 다음에 애플리케이션이 이벤트 루프에서 유휴 시간이 될 때까지만 유효합니다. 이때 모든 임시 그래픽 개체가 삭제됩니다. 즉, 임시 개체는 하나의 창 메시지를 처리하는 동안에만 유효합니다.

그래픽 개체 사용에 대한 자세한 내용은 Windows SDK의 그래픽 개체를 참조하세요.

예시

CBrush::CBrush에 대한 예제를 참조하세요.

CBrush::GetLogBrush

이 멤버 함수를 호출하여 구조를 검색합니다 LOGBRUSH .

int GetLogBrush(LOGBRUSH* pLogBrush);

매개 변수

pLogBrush
브러시에 LOGBRUSH 대한 정보가 포함된 구조를 가리킵니다.

Return Value

함수가 성공하고 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

이 연산자를 사용하여 개체의 연결된 Windows GDI 핸들을 가져옵니다 CBrush .

operator HBRUSH() const;

Return Value

성공하면 개체가 나타내는 Windows GDI 개체에 대한 핸들입니다 CBrush . 그렇지 않으면 NULL.

설명

이 연산자는 개체의 직접 사용을 지원하는 캐스팅 연산자입니다 HBRUSH .

그래픽 개체 사용에 대한 자세한 내용은 Windows SDK의 그래픽 개체를 참조하세요.

예시

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 클래스