イメージ リストのイメージの描画

更新 : 2007 年 11 月

イメージを描画するには、CImageList::Draw メンバ関数を使用します。この関数では、デバイス コンテキスト オブジェクトへのポインタ、描画するイメージのインデックス、イメージを描画するデバイス コンテキストの場所、および描画スタイルを示すフラグのセットを指定します。

ILD_TRANSPARENT スタイルを指定すると、Draw は 2 段階の手順でマスクされたイメージを描画します。まず、イメージのビットとマスクのビットに対して論理 AND 演算を実行します。次に、最初の演算の結果と出力先デバイス コンテキストの背景色のビットに対して、論理 XOR 演算を実行します。この処理では、結果のイメージに透明な領域が作成されます。つまり、マスク内で白を表すビットは、描画されるイメージでは透明のビットとして表現されます。

純色の背景上にマスクされたイメージを描画するには、あらかじめ SetBkColor メンバ関数を使用してイメージ リストの背景色を出力先と同じ色に設定します。この設定を行うと、イメージ内に透明の領域を作成する必要がなく、また Draw でイメージを出力先デバイス コンテキストにコピーするだけで済むため、パフォーマンスが大幅に向上します。イメージを描画するには、Draw を呼び出すときに ILD_NORMAL スタイルを指定します。

マスクされたイメージ リスト (CImageList) の背景色はいつでも設定できるので、純色の背景上に適切に描画できます。背景色を CLR_NONE に設定すると、イメージが既定で透過的に描画されます。イメージ リストの背景色を取得するには、GetBkColor メンバ関数を使用します。

ILD_BLEND25 および ILD_BLEND50 スタイルでは、システムの強調表示色でイメージがディザリングされます。ユーザーが選択できるオブジェクトをマスクされたイメージで表す場合は、これらのスタイルを使用すると便利です。たとえば、ILD_BLEND50 スタイルを使用して、ユーザーがイメージを選択したときに、そのイメージが描画されるように設定できます。

マスクされないイメージは、SRCCOPY ラスタ オペレーションで出力先デバイス コンテキストにコピーされます。イメージの色は、デバイス コンテキストの背景色に関係なく同じように表示されます。Draw で指定した描画スタイルも、マスクされていないイメージには影響しません。

Draw メンバ関数に加えて、もう 1 つの関数 DrawIndirect を使用すると、イメージの描画 (レンダリング) 機能を拡張できます。DrawIndirect では、IMAGELISTDRAWPARAMS 構造体をパラメータとして使用します。この構造体は、ラスタ オペレーション (ROP) コードの使用など、現在のイメージの描画 (レンダリング) をカスタマイズするのに使用できます。ROP コードの詳細については、Windows SDK の「Raster Operation Codes」と「Bitmaps as Brushes」を参照してください。

参照

概念

コントロール (MFC)

参照

CImageList の使い方