ビットマップをブラシに

今回は、ビットマップのもうひとつの使い方をやってみましょう。

CreatePatternBrush

ビットマップをブラシのパターンとして登録することにより、
面白い効果が得られることでしょう。
「多重起動の防止」のソースをスケルトンとして使います。
ウィンドウプロシージャ内に以下の内容を追加していきましょう。

     //デバイスコンテキスト
     HDC hdc ;
     PAINTSTRUCT paint ;
     //作成するブラシ・以前のブラシ
     HBRUSH hBrush, hOld;
     //作成するビットマップ
     HBITMAP hBitmap;
     //ビットマップデータ
     BYTE bm[]={0x55,0x55,
                        0xaa,0xaa};

hBrush・hOld は、作成するブラシと以前使っていたブラシの
ふたつのハンドルを格納するため、2つぶん宣言します。
hBitmap はビットマップのハンドルを格納します。
また、bm[] ではビットマップのパターンを今回は変えています。

               //デバイスコンテキストを取得
               hdc = BeginPaint(hwnd, &paint);
               //ビットマップを作成
               hBitmap = CreateBitmap(16,2,1,1,bm);
               //ビットマップブラシを作成
               hBrush=CreatePatternBrush(hBitmap);
               //デバイスコンテキストとブラシをつなぐ
               hOld = (HBRUSH)SelectObject (hdc, hBrush);

               //領域いっぱいに四角形を描く
               Rectangle (hdc,0,0,240,294) ;

               //以前のブラシに戻す
               SelectObject (hdc, hOld);
               //ブラシとビットマップを削除
               DeleteObject(hBrush);
               DeleteObject(hBitmap);
               //デバイスコンテキストを解放
               EndPaint(hwnd, &paint);

いつもと同じやり方でビットマップを作成した後、
CreatePatternBrush関数でビットマップをパターンにもつブラシを作成します。
selectobjectでそのブラシをデバイスコンテキストに設定します。
描画した後はブラシを戻し、削除した後ビットマップを削除します。
では実行してみましょう。

ビットマップをブラシに

四角形の内部が網目のビットマップパターンで塗りつぶされていますね。

HBRUSH CreatePatternBrush( HBITMAP hbmp );
第一引数 hbmp には、論理ブラシの作成に使われるビットマップのハンドルを指定します

戻り値 成功なら論理ブラシのハンドルが、失敗ならNULLが返ります。

ソースの表示

2005/6/2


戻る