• ベストアンサー

ビットマップを表示させる(MFC)

CDC::SelectObject を使用して、 ビットマップをメモリDCに割り当てたあと、 CDC::BitBltで画面に表示しています。 すでに、画面に表示されているビットマップを残したまま、 2枚目のビットマップを表示したいのですが、 2枚目を表示すると同時に1枚目のビットマップが消えてしまいます。 (当然ですが。。。) 1枚目(すでに表示させているビットマップ)を残し、 2枚目のビットマップを同じ画面に表示するには、 どうすればよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

あります。 最終的に表示したい大きさのビットマップをメモリDCに割り当てて、そのメモリDCに対して10回のBitBltを行います。そうして完成したビットマップを、今度は1回のBitBltで画面に表示します。 この方法であれば、WM_PAINTで再描画するビットマップはこの「最後に画面にBitBltするビットマップ」になるので、再描画処理も少し楽になります。 ちなみに、表示したいビットマップの一部が重なっているときには、素直に全部画面にBitBltすると重なっている部分がちらついてしまうので、1枚にまとめてからBitBltするのは必須のテクニックになります。

noname#254206
質問者

お礼

出来ました!ありがとうございました。

その他の回答 (1)

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

1枚目をBitBltしたときとは違う座標に2枚目をBitBltすれば、1枚目が出たまま2枚目も出ます。 WM_PAINTを処理するとき(OnPaint()内)でも同じように1枚目と2枚目をBitBltしてやることを忘れないようにしてください。これを忘れて、例えばWM_PAINT処理時に2枚目だけBitBltしてしまうと、1枚目が再描画されないので消えてしまいます。

noname#254206
質問者

お礼

回答ありがとうございます。 表示したいビットマップが10枚ほどあるのですが、 (10回BitBltせずに)1回のBitBltですべて表示する方法はありませんでしょうか? 理想としては、 すでに画面に表示してあるビットマップと新たに表示するビットマップを、 一回のBitBltで表示させたいのですが。。。