ホーム ATL/WTL
ブラシ
ドキュメント種別 ATL/WTL に関する文書
最終更新日 2003/12/17
PR
 WTLではGDIオブジェクトのブラシをCBrushTというテンプレートクラスでカプセル化しています。 テンプレート引数はbool値で、trueの場合はデストラクタでDeleteObject()を呼び出し、 falseの場合は呼び出しません。atlgdi.hヘッダではtypedefによって次のように宣言されています。

// atlgdi.h内
typedef CBrushT<false>  CBrushHandle;
typedef CBrushT<true>   CBrush;
			

 WTLのCBrushクラスは、MFCの同名のクラスとほぼ同じメンバ関数を用意しています。 以下に示すのは、CBrushクラスを使用してクライアント矩形に接する青い格子ハッチの円を描画する例です。


// WM_PAINTメッセージハンドラ
void OnPaint(HDC /*hDC*/){
    CPaintDC dc(m_hWnd);

    // 青い格子ハッチのブラシを作成し、選択
    CBrush brush;
    brush.CreateHatchBrush(HS_CROSS, RGB(0, 0, 255));
    HBRUSH hOldBrush = dc.SelectBrush(brush);

    // クライアント矩形を取得し、円を描画
    CRect rect;
    GetClientRect(rect);
    dc.Ellipse(rect);

    // 元のブラシを選択
    dc.SelectBrush(hOldBrush);
}
			

 この例では、まずブラシオブジェクトを作成し、 それをSelectBrush()で現在のブラシとして選択しています。 SelectBrush()は引数にHBRUSH型の変数を受け取りますが、 CBrushTクラスはHBRUSH変換演算子を持っているのでそのまま渡すことができます。 SelectBrush()は以前のブラシハンドルを返すので、 これをhOldBrushという変数に保存しておきます。

次に、円を描画します。青い格子ハッチの円が描画されます。

最後に、先ほど保存しておいた元のブラシハンドルに戻すため、 再度SelectBrush()を呼び出して元のブラシハンドルを選択します。

 ところで、WTLはストックブラシもサポートしています。 以下に示すのは、ストックブラシによって黒く塗りつぶされた円を描画する例です。

// WM_PAINTメッセージハンドラ
void OnPaint(HDC /*hDC*/){
    CPaintDC dc(m_hWnd);

    // ストックブラシを選択
    HBRUSH hOldBrush = dc.SelectStockBrush(BLACK_BRUSH);

    // クライアント矩形を取得し、円を描画
    CRect rect;
    GetClientRect(rect);
    dc.Ellipse(rect);

    // 元のブラシを選択
    dc.SelectBrush(hOldBrush);
}
			

また、atlmisc.hヘッダに定義されているAtlGetStockBrush()というグローバル関数を使えば、 ストックブラシのハンドルを取得することができます。

// ストックブラシのハンドルを取得
HBRUSH hStockBrush = AtlGetStockBrush(BLACK_BRUSH);