イメージ リストのイメージの描画
イメージを描画するには、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」を参照してください。