ウインドウ上に2個以上のビットマップを表示したいのですが、、、。
1個のビットマップ表示はできています。
OnDrown上に表示させるプログラムをかいていて、
いくつも表示させるというプログラムを書けば、うまくいきます。ただ、それだと、10個やそれ
以上になると厳しいので、、、。
何個表示させるかも不特定なので、、
出来れば、ひとつのプログラムでやりたいのです。
ご教授ください。お願いします。
お絵描き部をサブルーチン(メソッド)にする。
引数は絵を描く'位置'と'絵'
それを OnDraw内で好きなだけ呼べばいい。
ビットマップや表示位置を保存しておく構造体を作ります。
そして、必要な数だけその構造体の配列を作ります。
(本当に不特定の場合は、CArrayなどの可変長配列を使います。)
for文で配列の個数だけループして、1つずつビットマップを描画します。
既に書いておられますけれど、
要するに描画する場所と描画する内容をきちんと管理する仕組みを作って
その仕組みから一つずつ取り出して描画するような仕組みを作ればいいわけです。
いくつあるのかは管理している仕組みに問い合わせるようにすれば、
描画部分はその回数繰り返せば良いだけです。
管理する部分は構造体やクラスを作ればいいと思います。
また、管理用のクラス自身に描画用のメソッドを持たせて呼ぶという手もありますね。
この辺は実装しだいでいろいろ出来そうです。
ご自分で考えて見られてはどうでしょう?
返事が遅れてしまってすいません。いろいろ、やってみていました、、、。
いろいろ、アドバイスありがとうございます。
参考になります。
ところで、
以下のような関数を作成して、
int CMyView::drawpict(int px, int py, UINT ss, CDC *pDC)
{
BITMAP tBitmap;
CDC myDC;
CBitmap myBMP;
CBitmap* oldBMP;//ビットマップを読込む
myBMP.LoadBitmap(ss);
//ビットマップ情報を取得する
myBMP.GetObject(sizeof(tBitmap), &tBitmap);
myDC.CreateCompatibleDC(pDC);
oldBMP=myDC.SelectObject(&myBMP);
pDC->BitBlt
(px,py,tBitmap.bmWidth,tBitmap.bmHeight,&myDC,0,0,SRCCOPY);
myDC.SelectObject(oldBMP);
return 0;
}
この関数を必要な回数だけfor文で読もうと思っているのですが、、、
ここで、
px、pyはメインの部分で値を変化させています。
しかし、何回かこの関数を呼んで、実行させると、
絵の表示位置が変わるだけで、もともとあった、絵は消えてしまいます。
なぜでしょう??
私の想像としては、構造体の配列のように考えられるのですが、、
どう表記していいのかわかりませんでした(やはり、いくつも書くしか思いつきませんでし
た。。。)
こいう場合って、何か書き方があるのでしょうか??
ご教授ください。。
OnDraw()内にfor文があって、
ループの中でdrawpictを呼び出しているのですよね?
drawpict関数の中に、
TRACE((%d,%d)に%dを描画した\n, px, py, ss);
というようなトレース文を記述し、デバッガで実行して、
期待した通りに呼び出されているかを確認してみてください。
