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
の詳細については、「Graphic オブジェクト」を参照してください。
継承階層
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
オブジェクトを作成します。このオブジェクトは、使用する前に初期化する必要があります。
引数なしでコンストラクターを使用する場合は、結果の CBrush
オブジェクトを CreateSolidBrush
、 CreateHatchBrush
、 CreateBrushIndirect
、 CreatePatternBrush
、または CreateDIBPatternBrush
で初期化する必要があります。 引数を受け取るコンストラクターのいずれかを使用する場合、それ以上の初期化は必要ありません。 引数を持つコンストラクターは、エラーが発生した場合に例外をスローできますが、引数のないコンストラクターは常に成功します。
単一の COLORREF
パラメーターを持つコンストラクターは、指定された色のソリッド ブラシを構築します。 色は RGB 値を指定し、WINDOWS.H
のRGB
マクロを使用して構築できます。
2 つのパラメーターを持つコンストラクターは、ハッチ ブラシを構築します。 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 以外を返します。それ以外の場合は 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 以外を返します。それ以外の場合は 0 を返します。
解説
その後、ラスター演算をサポートする任意のデバイス コンテキストに対してブラシを選択できます。
2 つのバージョンは、DIB の処理方法が異なります。
最初のバージョンでは、DIB へのハンドルを取得するには、Windows
GlobalAlloc
関数を呼び出してグローバル メモリのブロックを割り当て、メモリにパックされた DIB を格納します。2 番目のバージョンでは、パックされた DIB のメモリを割り当てるために
GlobalAlloc
を呼び出す必要はありません。
パックされた DIB は、 BITMAPINFO
データ構造の直後に、ビットマップのピクセルを定義するバイト配列で構成されます。 塗りつぶしパターンとして使用されるビットマップは、8 ピクセル x 8 ピクセルにする必要があります。 ビットマップが大きい場合、Windows は、ビットマップの左上隅にある最初の 8 行と 8 列のピクセルに対応するビットのみを使用して塗りつぶしパターンを作成します。
アプリケーションが 2 色の DIB パターン ブラシをモノクロ デバイス コンテキストに選択すると、Windows は DIB で指定された色を無視し、代わりにデバイス コンテキストの現在のテキストと背景色を使用してパターン ブラシを表示します。 DIB の最初の色 (DIB カラー テーブルのオフセット 0) にマップされたピクセルは、テキストの色を使用して表示されます。 2 番目の色 (カラー テーブルのオフセット 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 カラー (ハッチの色) として指定します。 詳細については、Windows SDK の COLORREF
に関する記事を参照してください。
戻り値
正常終了した場合は 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
ビットマップを識別します。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
その後、ラスター演算をサポートする任意のデバイス コンテキストに対してブラシを選択できます。 pBitmap
によって識別されるビットマップは、通常、CBitmap::CreateBitmap
、CBitmap::CreateBitmapIndirect
、CBitmap::LoadBitmap
、またはCBitmap::CreateCompatibleBitmap
関数を使用して初期化されます。
塗りつぶしパターンとして使用されるビットマップは、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 値を指定し、WINDOWS.H
のRGB
マクロを使用して構築できます。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
その後、任意のデバイス コンテキストの現在のブラシとしてブラシを選択できます。
CreateSolidBrush
によって作成されたブラシの使用が完了したら、デバイス コンテキストからブラシを選択する必要があります。
例
CBrush::CBrush
の例を参照してください。
CBrush::CreateSysColorBrush
ブラシの色を初期化します。
BOOL CreateSysColorBrush(int nIndex);
パラメーター
nIndex
色のインデックスを指定します。 この値は、21 個のウィンドウ要素の 1 つを描画するために使用される色に対応します。 値の一覧については、Windows SDK の GetSysColor
を参照してください。
戻り値
正常終了した場合は 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 ブラシへのハンドル。
戻り値
成功した場合は CBrush
オブジェクトへのポインター。それ以外の場合は NULL
。
解説
CBrush
オブジェクトがまだハンドルにアタッチされていない場合は、一時的なCBrush
オブジェクトが作成されてアタッチされます。 この一時 CBrush
オブジェクトは、アプリケーションのイベント ループで次にアイドル時間が発生するまで有効です。 現時点では、すべての一時グラフィック オブジェクトが削除されます。 つまり、一時オブジェクトは、1 つのウィンドウ メッセージの処理中にのみ有効です。
グラフィック オブジェクトの使用方法の詳細については、Windows SDK の「 Graphic Objects 」を参照してください。
例
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
オブジェクトのアタッチされた Windows GDI ハンドルを取得するには、この演算子を使用します。
operator HBRUSH() const;
戻り値
成功した場合は、 CBrush
オブジェクトによって表される Windows GDI オブジェクトへのハンドル。それ以外の場合は NULL
。
解説
この演算子は、HBRUSH
オブジェクトの直接使用をサポートするキャスト演算子です。
グラフィック オブジェクトの使用方法の詳細については、Windows SDK の「 Graphic Objects 」を参照してください。
例
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);