イメージ リストのイメージの描画
イメージを描画するには、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
で指定された描画スタイルも、マスクされていないイメージの外観には影響を及ぼしません。
描画メンバー関数に加えて、別の関数 DrawIndirect は、イメージをレンダリングする機能を拡張します。 DrawIndirect
は、パラメーターとして IMAGELISTDRAWPARAMS 構造体を受け取ります。 この構造体は、ラスター操作 (ROP) コードの使用など、現在のイメージのレンダリングをカスタマイズするために使用できます。 ROP コードの詳細については、Windows SDK の「ラスター操作コード」と「ブラシとしてのビットマップ」に関するセクションを参照してください。