次の方法で共有


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 オブジェクト」を参照してください。

継承階層

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 オブジェクトを作成します。このオブジェクトは、使用する前に初期化する必要があります。

引数なしでコンストラクターを使用する場合は、結果の CBrush オブジェクトを CreateSolidBrushCreateHatchBrushCreateBrushIndirectCreatePatternBrush、または CreateDIBPatternBrushで初期化する必要があります。 引数を受け取るコンストラクターのいずれかを使用する場合、それ以上の初期化は必要ありません。 引数を持つコンストラクターは、エラーが発生した場合に例外をスローできますが、引数のないコンストラクターは常に成功します。

単一の COLORREF パラメーターを持つコンストラクターは、指定された色のソリッド ブラシを構築します。 色は RGB 値を指定し、WINDOWS.HRGB マクロを使用して構築できます。

2 つのパラメーターを持つコンストラクターは、ハッチ ブラシを構築します。 nIndex パラメーターは、ハッチング パターンのインデックスを指定します。 crColor パラメーターは色を指定します。

CBitmap パラメーターを持つコンストラクターは、パターン化されたブラシを構築します。 このパラメーターはビットマップを識別します。 ビットマップは、 CBitmap::CreateBitmapCBitmap::CreateBitmapIndirectCBitmap::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 ベースのアプリケーションに使用する必要があります)。

  • 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 に関する記事を参照してください。

戻り値

正常終了した場合は 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::CreateBitmapCBitmap::CreateBitmapIndirectCBitmap::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.HRGB マクロを使用して構築できます。

戻り値

正常終了した場合は 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 が有効なポインターである場合、戻り値はバッファーに格納されたバイト数です。

関数が成功し、 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

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);

関連項目

MFC サンプル PROPDLG
CGdiObject クラス
階層図
CBitmap クラス
CDC クラス