既存のブラシ属性の使い方は前回と同じです。
windowsが用意しているブラシ属性は以下の6種類です。
WHITE_BRUSH
LTGRAY_BRUSH
GRAY_BRUSH
DKGRAY_BRUSH
BLACK_BRUSH
NULL_BRUSH
「多重起動の防止」のソースをスケルトンとして使います。
ウィンドウプロシージャ内に以下の内容を追加していきましょう。
//取得するブラシ・以前のブラシ HBRUSH hBrush, hOld;
ブラシオブジェクトの宣言ですね。
//デバイスコンテキストを取得 hdc = BeginPaint(hwnd, &paint); //ストックブラシを取得 hBrush = (HBRUSH) GetStockObject (GRAY_BRUSH) ; //NULL_BRUSHだと塗りつぶされない //デバイスコンテキストにブラシを設定 hOld = (HBRUSH)SelectObject (hdc, hBrush); //領域いっぱいに四角形を描く Rectangle (hdc,0,0,240,294) ; //以前のブラシに戻す SelectObject (hdc, hOld); //領域いっぱいに円・楕円を描く Ellipse (hdc,0,0,240,294) ; //デバイスコンテキストを解放 EndPaint(hwnd, &paint);
hBrushブラシはGetStockObject関数で既存のブラシ属性(GRAY_BRUSH)を取得します。
取得したブラシをSelectObject関数でデバイスコンテキストに設定すると、
戻り値として以前のオブジェクトのハンドルが返るのでhOldに保存しておきます。
四角形を描いた後、以前のブラシに戻して楕円を描いています。
このhBrushのブラシ属性は、windowsが元々用意していたものなので
削除する必要はありません。
では実行してみましょう。
四角形はGLAYブラシで、楕円は白いブラシで塗りつぶされています。
今度は自分でブラシを作ってみます。
上のBeginPaint~EndPaint内のみを変更します。
//デバイスコンテキストを取得 hdc = BeginPaint(hwnd, &paint); //ブラシを作成 hBrush = CreateSolidBrush(RGB(255,0,0)) ; //デバイスコンテキストとブラシをつなぐ hOld = (HBRUSH)SelectObject (hdc, hBrush); //領域いっぱいに四角形を描く Rectangle (hdc,0,0,240,294) ; //以前のブラシに戻す SelectObject (hdc, hOld); //作成したブラシを削除 DeleteObject (hBrush); //領域いっぱいに円・楕円を描く Ellipse (hdc,0,0,240,294) ; //デバイスコンテキストを解放 EndPaint(hwnd, &paint);
CreateSolidBrush関数で新しい論理ブラシを作成します。
論理ブラシの使い方もいつもと同じで、SelectObjectでデバイスコンテキストに設定し、
用が終わったらDeleteObject関数でブラシを削除します。
作成したオブジェクトがデバイスコンテキストと接続している間は
オブジェクトは破棄されないようです。
こういうところでメモリリークが起こりやすいので注意しましょう。
では実行してみましょう。
HBRUSH CreateSolidBrush( COLORREF crColor );
第一引数 crColor には、ブラシの色を指定します
戻り値 成功なら論理ブラシのハンドルが、失敗ならNULLが返ります。
2005/5/28