共用方式為


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取得 結構。

公用運算子

名稱 描述
CBrush::operator HBRUSH 傳回附加至 CBrush 物件的 Windows 控制碼。

備註

若要使用 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 的物件,該物件必須先初始化才能使用。

如果您使用不含引數的建構函式,則必須使用 CreateSolidBrushCreateHatchBrushCreateBrushIndirectCreatePatternBrushCreateDIBPatternBrush 初始化產生的 CBrush 物件。 如果您使用其中一個接受引數的建構函式,則不需要進一步初始化。 如果遇到錯誤,具有引數的建構函式可能會擲回例外狀況,而沒有引數的建構函式一律會成功。

具有單 COLORREF 一參數的建構函式會建構具有指定色彩的純色筆刷。 色彩會指定 RGB 值,而且可以使用 中的 WINDOWS.H 宏來建構 RGB

具有兩個參數的建構函式會建構影線筆刷。 參數 nIndex 會指定已孵化模式的索引。 參數 crColor 會指定色彩。

具有參數的 CBitmap 建構函式會建構模式筆刷。 參數會識別點陣圖。 假設已使用 CBitmap::CreateBitmap 、、 CBitmap::CreateBitmapIndirectCBitmap::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 包含筆刷相關資訊的結構。

傳回值

如果函式成功則為非零,否則為 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」的一部分)是否 bmiColors[] 包含明確的 RGB 值或索引到目前實現的邏輯調色盤中。 參數必須是下列其中一個值:

  • DIB_PAL_COLORS 色彩資料表是由 16 位索引的陣列所組成。

  • DIB_RGB_COLORS 色彩資料表包含常值 RGB 值。

lpPackedDIB
指向由結構所組成的 BITMAPINFO 封裝 DIB,後面接著定義點陣圖圖元的位元組陣列。

傳回值

如果成功則為非零;否則為 0。

備註

之後可以針對支援點陣作業的任何裝置內容選取筆刷。

這兩個版本在處理 DIB 的方式不同:

  • 在第一個版本中,若要取得 DIB 的控制碼,您可以呼叫 Windows GlobalAlloc 函式來配置全域記憶體區塊,然後使用封裝的 DIB 填滿記憶體。

  • 在第二個版本中,不需要呼叫 GlobalAlloc 來配置已封裝 DIB 的記憶體。

封裝的 DIB 是由 BITMAPINFO 資料結構所組成,緊接著定義點陣圖圖元的位元組陣列。 做為填滿圖樣使用的點陣圖應為 8 圖元 8 圖元。 如果點陣圖較大,Windows 只會使用點陣圖左上角的前 8 個數據列和 8 個圖元資料行對應的位來建立填滿圖。

當應用程式選取雙色 DIB 模式筆刷到單色裝置內容時,Windows 會忽略 DIB 中指定的色彩,而是使用裝置內容目前的文字和背景色彩來顯示圖樣筆刷。 對應至 DIB 第一個色彩的圖元(在 DIB 色彩表格中的位移 0)會使用文字色彩來顯示。 對應至第二個色彩的圖元(色彩表格中的位移 1)會使用背景色彩來顯示。

如需使用下列 Windows 函式的相關資訊,請參閱 Windows SDK:

範例

// 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 Windows SDK。

傳回值

如果成功則為非零;否則為 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::CreateBitmapCBitmap::CreateBitmapIndirectCBitmap::LoadBitmapCBitmap::CreateCompatibleBitmap 函式初始化。

做為填滿圖樣使用的點陣圖應為 8 圖元 8 圖元。 如果點陣圖較大,Windows 只會使用位對應到點陣圖左上角的前 8 個數據列和資料行圖元。

模式筆刷可以刪除,而不會影響相關聯的點陣圖。 這表示點陣圖可用來建立任意數目的圖樣筆刷。

使用單色點陣圖建立的筆刷(每圖元 1 個色彩平面,每圖元 1 位)會使用目前的文字和背景色彩繪製。 以位設為 0 表示的圖元會以目前的文字色彩繪製。 以位設為 1 表示的圖元會以目前的背景色彩繪製。

如需使用 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 值,而且可以使用 中的 WINDOWS.H 宏來建構 RGB

傳回值

如果成功則為非零;否則為 0。

備註

筆刷隨後可以選取為任何裝置內容的目前筆刷。

當應用程式使用 所 CreateSolidBrush 建立的筆刷完成時,它應該會從裝置內容中選取筆刷。

範例

請參閱 的 CBrush::CBrush 範例。

CBrush::CreateSysColorBrush

初始化筆刷色彩。

BOOL CreateSysColorBrush(int nIndex);

參數

nIndex
指定色彩索引。 這個值對應于用來繪製其中一個 21 個視窗元素的色彩。 如需值清單,請參閱 GetSysColor Windows SDK 中的 。

傳回值

如果成功則為非零;否則為 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 筆刷的控制碼。

傳回值

如果成功, CBrush 則為 物件的指標,否則 NULL 為 。

備註

CBrush如果物件尚未附加至控制碼,則會建立並附加暫存 CBrush 物件。 這個暫存 CBrush 物件只有在應用程式下次在其事件迴圈中有閒置時間為止才有效。 此時,會刪除所有暫存繪圖物件。 換句話說,暫存物件只有在處理一個視窗訊息時才有效。

如需使用繪圖物件的詳細資訊,請參閱 Windows SDK 中的繪圖物件

範例

請參閱 CBrush::CBrush 的 範例

CBrush::GetLogBrush

呼叫這個成員函式以擷 LOGBRUSH 取 結構。

int GetLogBrush(LOGBRUSH* pLogBrush);

參數

pLogBrush
指向 LOGBRUSH 包含筆刷相關資訊的結構。

傳回值

如果函式成功,而且 pLogBrush 是有效的指標,傳回值就是儲存在緩衝區中的位元組數目。

如果函式成功,而 pLogBrushNULL ,則傳回值是保存函式將儲存至緩衝區之資訊所需的位元組數目。

如果函式失敗,傳回值為 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;

傳回值

如果成功,則為 物件所 CBrush 代表之 Windows GDI 物件的控制碼,否則 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