ブラシの使用方法
ペイントや塗りつぶしを行うにはブラシを使います。さまざまな種類のブラシを作成できます。
- 純色ブラシ
色を指定して作成(CreateSolidBrushおよびCreateSysColorBrush) - パターンブラシ
ビットマップを指定して作成(CreatePatternBrush) - DIBパターンブラシ
デバイス非依存ビットマップを指定して作成(CreateDIBPatternBrush) - ハッチブラシ
パターンと色を指定して作成(CreateHatchBrush)- 45度の右下がりハッチ(HS_BDIAGONAL)
- 45度の右上がりハッチ(HS_FDIAGONAL)
- 水平と垂直の格子ハッチ(HS_CROSS)
- 45度の斜め格子ハッチ(HS_DIAGCROSS)
- 水平線ハッチ(HS_HORIZONTAL)
- 垂直線ハッチ(HS_VERTICAL)
これらのブラシは、LOGBRUSH構造体を指定して作成するという方法もあります(CreateBrushIndirect
)。
ブラシの使用例1
次に紹介する1番目の例では、赤色の純色ブラシを使って四角形を描画します。Rectangle()
メソッドを使う場合は、デバイスコンテキスト内でブラシを選択する必要があります。また、このメソッドは、現在選択されているペン(既定では1ピクセル幅、実線、黒色)を使って四角形の周りに縁も描画します。
void CChildView::OnPaint() { CPaintDC dc(this); CRect rc; GetClientRect(rc); rc.DeflateRect(50, 50, 50, 50); // create a solid red brush CBrush br(RGB(255, 0, 0)); // select the brush into the device context CBrush* oldbrush = dc.SelectObject(&br); // draw a rectangle using the current brush for filling and // current pen for border dc.Rectangle(rc); // select back the old brush dc.SelectObject(oldbrush); }
ブラシの使用例2
2番目の例では、COLORREFカラーまたはシステムカラー(COLOR_BTNFACE)から純色ブラシを作成します。FillRect()
メソッドは、提供されているブラシを使って四角形を描画します(CDCオブジェクトで事前に選択されている必要はありません)。四角形の周りに縁を描画しない点も、Rectangle()
とは異なります。
void CChildView::OnPaint() { CPaintDC dc(this); CRect rc; GetClientRect(rc); // create a red brush CBrush br1; br1.CreateSolidBrush(RGB(255, 0, 0)); // create a brush with a system color CBrush br2; br2.CreateSysColorBrush(COLOR_BTNFACE); // fill a left rect with red brush CRect rc1 = rc; rc1.DeflateRect(50, 50, rc.Width()/2+10, 50); dc.FillRect(&rc1, &br1); // fill a right rect with system color brush CRect rc2 = rc; rc2.DeflateRect(rc.Width()/2+10, 50, 50, 50); dc.FillRect(&rc2, &br2); }
ブラシの使用例3
パターンでの塗りつぶしには、ビットマップを使います。リソースからビットマップを読み込み、それを使ってブラシを作成できます。RoundRect()
メソッドは、縁が丸い四角形を描画します。この例では、白黒のタイルパターンを使っています。
void CChildView::OnPaint() { CPaintDC dc(this); CRect rc; GetClientRect(rc); rc.DeflateRect(50, 50, 50, 50); CBitmap bmp; bmp.LoadBitmap(IDB_PATTERN); // Create a pattern brush from the bitmap. CBrush brush; brush.CreatePatternBrush(&bmp); // Select the brush into a device context, and draw. CBrush* pOldBrush = (CBrush*)dc.SelectObject(&brush); // draw a rounded rectangle dc.RoundRect(rc, CPoint(10,10)); // Restore the original brush. dc.SelectObject(pOldBrush); }
ブラシの使用例4
このセクションの先頭で示したように、6種類のハッチブラシを作成できます。そのすべての使用例を以下に示します。
void CChildView::OnPaint() { CPaintDC dc(this); CRect rc; GetClientRect(rc); rc.DeflateRect(10, 10, 10, 10); CBrush brush1; brush1.CreateHatchBrush(HS_BDIAGONAL, RGB(255, 0, 0)); dc.FillRect( CRect(rc.left, rc.top, rc.Width()/2-10, rc.Height()/3-5), &brush1); CBrush brush2; brush2.CreateHatchBrush(HS_FDIAGONAL, RGB(255, 0, 0)); dc.FillRect( CRect(rc.Width()/2+10, rc.top, rc.right, rc.Height()/3-5), &brush2); CBrush brush3; brush3.CreateHatchBrush(HS_DIAGCROSS, RGB(255, 0, 0)); dc.FillRect( CRect(rc.left, rc.Height()/3+5, rc.Width()/2-10, 2*rc.Height()/3-5), &brush3); CBrush brush4; brush4.CreateHatchBrush(HS_CROSS, RGB(255, 0, 0)); dc.FillRect( CRect(rc.Width()/2+10, rc.Height()/3+5, rc.right, 2*rc.Height()/3-5), &brush4); CBrush brush5; brush5.CreateHatchBrush(HS_HORIZONTAL, RGB(255, 0, 0)); dc.FillRect( CRect(rc.left, 2*rc.Height()/3+5, rc.Width()/2-10, rc.bottom), &brush5); CBrush brush6; brush6.CreateHatchBrush(HS_VERTICAL, RGB(255, 0, 0)); dc.FillRect( CRect(rc.Width()/2+10, 2*rc.Height()/3+5, rc.right, rc.bottom), &brush6); }