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
,請參閱 圖形物件。
繼承階層架構
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
的物件,該對象必須先初始化才能使用。
如果您使用不含自變數的建構函式,則必須使用CreateSolidBrush
、CreateHatchBrush
、CreateBrushIndirect
、 CreatePatternBrush
或 CreateDIBPatternBrush
初始化產生的CBrush
物件。 如果您使用其中一個接受自變數的建構函式,則不需要進一步初始化。 如果遇到錯誤,具有自變數的建構函式可能會擲回例外狀況,而沒有自變數的建構函式一律會成功。
具有單 COLORREF
一參數的建構函式會建構具有指定色彩的純色筆刷。 色彩會指定 RGB 值,而且可以使用 中的WINDOWS.H
巨集來建構RGB
。
具有兩個參數的建構函式會建構影線筆刷。 參數 nIndex
會指定已孵化模式的索引。 參數 crColor
會指定色彩。
具有參數的 CBitmap
建構函式會建構模式筆刷。 參數會識別位圖。 假設已使用 CBitmap::CreateBitmap
、、 CBitmap::CreateBitmapIndirect
CBitmap::LoadBitmap
或 CBitmap::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:
CreateDIBPatternBrush
(此函式僅適用於針對早於 3.0 版 Windows 所撰寫之應用程式的相容性;請使用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
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::CreateBitmap
、 CBitmap::CreateBitmapIndirect
、 CBitmap::LoadBitmap
或 CBitmap::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
是有效的指標,傳回值就是儲存在緩衝區中的位元元組數目。
如果函式成功,而 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;
傳回值
如果成功,則為物件所 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);