|
ブラシを使った描画2
前回の続きで、ブラシを使った描画処理です。では、さっそくOnPaint()関数です。ここで、現在のブラシを使って面を描画します。
void CDC4Dlg::OnPaint()
{
CClientDC cdc(this);
RECT rect = {12, 190, 282, 260};
int err = 0;
if (!err) UpdateData();
// 古いブラシを削除
if (!err)
{
if (m_brush.GetSafeHandle())
if (!m_brush.DeleteObject()) err = 1;
}
// 新しいブラシを作成
if (!err)
{
// ソリッドブラシ
if (m_xvComboKind == _T("SOLID"))
{
if (!m_brush.CreateSolidBrush(m_color)) err = 1;
}
// ハッチブラシ
else if (m_xvComboKind == _T("HATCH"))
{
int nIndex = HS_BDIAGONAL;
// ハッチブラシのスタイル
if (m_xvComboHatch == _T("BDIAGONAL")) nIndex = HS_BDIAGONAL;
if (m_xvComboHatch == _T("CROSS")) nIndex = HS_CROSS;
if (m_xvComboHatch == _T("DIAGCROSS")) nIndex = HS_DIAGCROSS;
if (m_xvComboHatch == _T("FDIAGONAL")) nIndex = HS_FDIAGONAL;
if (m_xvComboHatch == _T("HORIZONTAL")) nIndex = HS_HORIZONTAL;
if (m_xvComboHatch == _T("VERTICAL")) nIndex = HS_VERTICAL;
if (!m_brush.CreateHatchBrush(nIndex, m_color)) err = 1;
}
// システムカラーブラシ
else if (m_xvComboKind == _T("SYSCOLOR"))
{
int nIndex = COLOR_ACTIVECAPTION;
// システムカラーブラシの色
if (m_xvComboSysColor == _T("ACTIVECAPTION")) nIndex = COLOR_ACTIVECAPTION;
if (m_xvComboSysColor == _T("WINDOW")) nIndex = COLOR_WINDOW;
if (m_xvComboSysColor == _T("WINDOWTEXT")) nIndex = COLOR_WINDOWTEXT;
if (!m_brush.CreateSysColorBrush(nIndex)) err = 1;
}
// パターンブラシ
else if (m_xvComboKind == _T("PATTERN"))
{
CBitmap bitmap;
// ビットマップリソース読み込み
if (!err) if (!bitmap.LoadBitmap(IDB_BITMAP1)) err = 1;
if (!err) if (!m_brush.CreatePatternBrush(&bitmap)) err = 1;
}
else err = 1;
}
// 作成したブラシで塗りつぶし
if (!err) cdc.FillRect(&rect, &m_brush);
CDialog::OnPaint();
}
|
まず、ブラシを作成する前に、古いブラシがある場合は削除しておきます。削除はCGdiObject::DeleteObject()関数でできます。
次は、新しいブラシを作成します。ブラシの種類によって作成する関数が変わってきます。
・ソリッドブラシ:CBrush::CreateSolidBrush()
・ハッチブラシ:CBrush::CreateHatchBrush()
・システムカラーブラシ:CBrush::CreateSysColorBrush()
・パターンブラシ:CBrush::CreatePatternBrush()
では、一つずつ見ていきましょう。まず、ソリッドブラシの作成です。
| BOOL CBrush::CreateSolidBrush(COLORREF crColor); |
| 説明: |
新しいソリッドブラシを作成 |
| 引数: |
crColor:ブラシの色 |
| 戻り値: |
正常終了した場合は0以外、それ以外の場合は0 |
引数にはソリッドブラシの色を指定します。次はハッチブラシの場合です。
| BOOL CBrush::CreateHatchBrush(int nIndex, COLORREF crColor); |
| 説明: |
新しいハッチブラシを作成 |
| 引数: |
nIndex:ハッチブラシのスタイル
crColor:ブラシの色 |
| 戻り値: |
正常終了した場合は0以外、それ以外の場合は0 |
引数にはハッチブラシの色とハッチスタイルを指定します。ハッチスタイルは次の中から指定します。
HS_BDIAGONAL:45°の右下がり
HS_CROSS:水平と垂直の格子
HS_DIAGCROSS:45°の斜め格子
HS_FDIAGONAL:45°の右上がり
HS_HORIZONTAL:水平線
HS_VERTICAL:垂直線
次はシステムカラーブラシの場合です。
| BOOL CBrush::CreateSysColorBrush(int nIndex); |
| 説明: |
新しいシステムカラーブラシを作成 |
| 引数: |
nIndex:カラーインデックス |
| 戻り値: |
正常終了した場合は0以外、それ以外の場合は0 |
カラーインデックスは多くの種類があります。COLOR_WINDOWはウィンドウの背景色、COLOR_WINDOWTEXTはウィンドウ内のテキストの色、COLOR_ACTIVECAPTIONはアクティブウィンドウのタイトルバーの色をあらわします。次はパターンブラシの場合です。
| BOOL CBrush::CreatePatternBrush(CBitmap* pBitmap); |
| 説明: |
新しいパターンブラシを作成 |
| 引数: |
pBitmap:ビットマップクラスへのポインタ |
| 戻り値: |
正常終了した場合は0以外、それ以外の場合は0 |
ビットマップはCBitmapクラスで扱います。CBitmapはGDIオブジェクトの1つです。まず、パターンブラシに渡すCBitmapクラスのオブジェクトを作成し、CBitmap::LoadBitmap()関数でリソースからビットマップを読み込みます。CreatePatternBrush()関数では、作成したCBitmapクラスのオブジェクトを渡します。
面の描画は、CDC::FillRect()関数できます。描画する範囲を設定したRECT構造体と、CBrushクラスのオブジェクトを渡します。
では、ビルドして実行してみましょう。ブラシの種類をSOLIDにして色選択で色を変えると、選択した色で塗りつぶされます。

ブラシの種類をHATCHにし、ハッチスタイルを変えると、指定したハッチブラシで描画されます。



ブラシの種類をSYSCOLORにし、システムカラーを変えると、指定したシステムカラーで描画されます。


ブラシの種類をPATTRENにすると、パターンブラシで描画されます。

|