ビットマップを重ねて表示したい – プログラミング – Home

ビットマップを重ねて表示したい
 
通知
すべてクリア

[解決済] ビットマップを重ねて表示したい


Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

Puppyです。お世話になっています。

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

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

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


引用未解決
トピックタグ
Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

追記です。

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

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

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

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


返信引用
yas0302
 yas0302
(@yas0302)
ゲスト
結合: 23年前
投稿: 37
 

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
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

dc.DrawState(pt, size, &A, DSS_NORMAL, (HBRUSH)NULL);
では?


返信引用
Puppy
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

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

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

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

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

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

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

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

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


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

>>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
 Puppy
(@Puppy)
ゲスト
結合: 23年前
投稿: 71
Topic starter  

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました