ビットマップを重ねて表示したい

[戻る]
Puppy 2002/06/20(木) 14:00:02
Puppyです。お世話になっています。

環境はWin2000/98,VC6.0,MFCです。

やっとの思いでbitmapAはViewに貼り付けることができました。
下のように、大きなビットマップAの上に座標を指定して
bitmapB, Cを上書きしたいのですが、どうしたらよいのでしょうか?
描画の知識がないので、よろしくお願いします。

 bitmap A
┌────────────┐
│            │
│  bitmap B      │
│  ┌──┐      │
│  │  │      │
│  └──┘      │
│        bitmap C │
│       ┌──┐ │
│       │  │ │
│       └──┘ │
│            │
└────────────┘

Puppy 2002/06/20(木) 14:13:23
追記です。

裏画面という方法でやりたいです。
今は、裏画面にビットマップAをはりつけて、描画はCDC::Bitbltしています。

やりたいことは、裏画面上でビットマップAにBとCを座標を指定して
はりつけたいです。そうすれば、後はBitBltすればいいのかなと思ってます。

どうやっていいのか、さっぱりわからないので参考になるホームページや
やりかたを教えて下さい。

よろしくお願いします。ペコリm(..)m

yas0302 2002/06/20(木) 14:20:32
bitmap A を View に描画したのと同じ方法で、
ビットマップを、描画する始点を変えて
bitmap B、bitmap C を描画すれば、できますが。

たとえば、

bitmap B は、100,100 
bitmap C は、300,300 を始点として描画する場合、

Viewの OnDraw の中で、(※ 直接描画する場合)

void XXXXView::OnDraw(CDC* pDC)
{
         :
         :
  old = MemDC->SelectObject(bitmapA);
  pDC->BitBlt(0,0,WidthA,HeightA,MemDC,0,0,SRCCOPY);    // bitmap A を書く
         :
         :
  MemDC->SelectObject(bitmapB);
  pDC->BitBlt(100,100,WidthB,HeightB,MemDC,0,0,SRCCOPY); // bitmap B を書く
         :
         :
  MemDC->SelectObject(bitmapC);
  pDC->BitBlt(300,300,WidthC,HeightC,MemDC,0,0,SRCCOPY); // bitmap C を書く
  MemDC->SelectObject(old);


こんな、かんじです。

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

書いてる途中に更新されてたので、上が無駄になってしまいました。


>>  裏画面という方法でやりたいです。

の場合も同じように、
pDC のかわりに、裏画面用に作成した
DCに対してBitBlt してやればできます。

dairygoods 2002/06/20(木) 14:23:22
dc.DrawState(pt, size, &A, DSS_NORMAL, (HBRUSH)NULL);
では?

Puppy 2002/06/20(木) 14:39:48
yas0302さん レスありがとうございます。

>こんな、かんじです。
>↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
>書いてる途中に更新されてたので、上が無駄になってしまいました。

ゴメンナサイですぅ。m(..)m

>>  裏画面という方法でやりたいです。
>の場合も同じように、
>pDC のかわりに、裏画面用に作成した
>DCに対してBitBlt してやればできます。

なんとなくわかりました。さっそく試してみます。

dairygoodsさん レスありがとうございます。

>dc.DrawState(pt, size, &A, DSS_NORMAL, (HBRUSH)NULL);

これだけでB, Cの上書きもできるのでしょうか???
解説を読んでも意味がさっぱりわかりませんでした。

dairygoods 2002/06/20(木) 14:53:13
>>dc.DrawState(pt, size, &A, DSS_NORMAL, (HBRUSH)NULL);
>これだけでB, Cの上書きもできるのでしょうか???

あ、Aじゃないですね。

裏画面のデバイスコンテキストを dc として、
dc.DrawState(pt, size, &B, DSS_NORMAL, (HBRUSH)NULL);
dc.DrawState(pt, size, &C, DSS_NORMAL, (HBRUSH)NULL);

とします。

解説はややこしいかもしれませんが、
ようするに位置pt、サイズsizeの矩形に何かを描画する関数です。

Puppy 2002/06/20(木) 15:24:09
[[解決]]
>裏画面のデバイスコンテキストを dc として、
>dc.DrawState(pt, size, &B, DSS_NORMAL, (HBRUSH)NULL);
>dc.DrawState(pt, size, &C, DSS_NORMAL, (HBRUSH)NULL);
>とします

わかりましたぁ。(^-^;

ありがとうございました。さっそく試してみます。

古いスレッドには追加発言できません。