CBrush::CreateDIBPatternBrush
更新 : 2007 年 11 月
デバイスに依存しないビットマップ (DIB) で指定されたパターンでブラシを初期化します。
BOOL CreateDIBPatternBrush(
HGLOBAL hPackedDIB,
UINT nUsage
);
BOOL CreateDIBPatternBrush(
const void* lpPackedDIB,
UINT nUsage
);
パラメータ
hPackedDIB
パックされたデバイスに依存しないビットマップ (DIB) を持つグローバル メモリ オブジェクトを識別します。nUsage
BITMAPINFO データ構造体の bmiColors[] フィールドが、リテラル RGB 値と、現在実現されている論理パレットへのインデックスのどちらを表すかを指定します。この値に指定するのは、次の 2 つのいずれかです。DIB_PAL_COLORS カラー テーブルは、16 ビットのインデックスの配列により構成されます。
DIB_RGB_COLORS カラー テーブルは、リテラル RGB 値を表します。
lpPackedDIB
BITMAPINFO 構造体とその直後に続くビットマップのピクセルを定義するバイトの配列とで構成される、パックされた DIB へのポインタ。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
初期化されたブラシは、ラスタ操作をサポートする任意のデバイス コンテキスト用に選択できるようになります。
2 つの形式は DIB を処理する方法に違いがあります。
最初の形式では、DIB へのハンドルを取得するために、Windows の GlobalAlloc 関数を呼び出し、グローバル メモリ ブロックを割り当てます。その後、パックされた DIB をメモリにセットします。
2 番目の形式では、パックされた DIB のメモリを割り当てるために GlobalAlloc を呼び出す必要はありません。
パックされた DIB は、BITMAPINFO データ構造体と、この構造体の直後に続くビットマップの各ピクセル数を定義するバイト配列で構成されます。ビットマップは 8 ピクセル × 8 ピクセルの塗りつぶしパターンに使われます。ビットマップが大きいときは、Windows ではビットマップの左上隅の 8 行、8 列のピクセルのみを使って、埋め込むためのパターンが作られます。
アプリケーションでモノクロ デバイス コンテキストに対して 2 色の DIB パターン ブラシを選択するときは、DIB で指定される色は無視されて、デバイス コンテキストの現在のテキストの色と背景色によってパターン ブラシが表示されます。DIB の最初の色 (DIB カラー テーブルのオフセット 0) に割り当てられたピクセルは、テキストの色で表示されます。2 つ目の色 (カラー テーブルのオフセット 1) に割り当てられたピクセルは、背景色で表示されます。
次の Windows 関数の使い方の詳細については、Windows SDK を参照してください。
CreateDIBPatternBrush Windows 3.0 以前のバージョン用に作成されているアプリケーションとの互換性のために用意されています。CreateDIBPatternBrushPt 関数を使用してください。
CreateDIBPatternBrushPt Win32 ベースのアプリケーションで使われます。
使用例
// Resource handle to bitmap.
HRSRC hRes;
// Global handles to bitmap resource.
HGLOBAL hData;
void* hLockedData;
CBrush brush;
// Find the resource handle.
hRes = ::FindResource(AfxGetResourceHandle(),
MAKEINTRESOURCE(IDB_BRUSH), RT_BITMAP);
if (hRes != NULL)
{
// Lock and Load (or Load and Lock).
if (((hData = ::LoadResource(AfxGetResourceHandle(),
hRes)) != NULL) &&
((hLockedData = ::LockResource(hData)) != NULL))
{
// Initialize the brush.
brush.CreateDIBPatternBrush((const void*)hLockedData,
DIB_RGB_COLORS);
// Select the brush into the device context.
CBrush* pOldBrush = pDC->SelectObject(&brush);
// Draw.
pDC->Rectangle(50, 50, 200, 200);
// Restore the original device context.
pDC->SelectObject(pOldBrush);
// Free the resource.
::FreeResource(hLockedData);
}
}
必要条件
ヘッダー : afxwin.h