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 には、4 つのオーバーロードされたコンストラクターがあります。 引数を持たないコンストラクターは、使用する前に初期化する必要がある初期化 CBrush されていないオブジェクトを構築します。

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

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

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" の一部) に、現在実現されている論理パレットに明示的な RGB 値またはインデックスを含めるかどうかをbmiColors[]指定します。 パラメーターは、次のいずれかの値である必要があります。

  • 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::CreateBitmapIndirectCBitmap::LoadBitmapまたはCBitmap::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 値を指定し、次のマクロ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 のグラフィック オブジェクト」を参照してください

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 のグラフィック オブジェクト」を参照してください

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 クラス