すみません。失礼しました。国語辞典で調べたらありました。
決して、そういうつもりで質問したわけではありませんので、お許しください。
>On_Draw() はどのクラスにも属さない函数なのですか?
On_Drawの中にある、PicDraw(pDC,SITEN.x,SITEN.y,P_ID) というのが、
CItemというクラスにあるものでして、それ以外のクラスには属していませんが、
これがなにか問題なのでしょうか?
それから、OnEraseBkgnd(pDC)を使って、最小化して元に戻した時に絵を消さないようにする
のは
できたのですが、なぜか直前の絵だけしかのこってないのです。
絵を3つ描いて最小化させ、元に戻すと真白の状態ではないにしろ、
最後の絵しか残らないのです。。。
OnEraseBkgnd()っていうのは、背面を塗りつぶすかどうかってことですよね?
この現象はなぜなんでしょうか?教えてください。
> OnEraseBkgnd(pDC)を使って、最小化して元に戻した時に絵を消さないようにする
これはOnDraw()にコードを書くだけで充分なはず??
>決して、そういうつもりで質問したわけではありませんので、お許しください。
こちらこそあなたに不慣れな表記(函数(かんすう、関数))を使ってしまい御免なさい
>これがなにか問題なのでしょうか?
いえ、CView::OnDraw() と On_Draw() とがどういう関係なのか知りたかったのです
>最後の絵しか残らないのです。。。
現在絵を幾つ表示しなければならないのか誰かが知っていなければなりませんね
あなたの提示されたコードを読んで判る事は表示対象が幾つどのようなものがあるのか
について記録なさっていないようだという事です
std::vector か CArray か、上限があるなら排列((はいれつ、配列)でもいいでしょうが)
か、に記録するといいと思います
例えば、std::vector <CItem> Items; が CXXXXXDoc か CXXXXXView かのメンバーとして
あれば、幾つどのようなものがあるのかが判るので表示する事が出来るでしょう
On_Draw()のなかに、
OnEraseBkgnd(pDC)と書いてからif(xxx){PicDraw()}するようにしてあるだけなんですけど、
上記のような現象がでてしまうのですが。。。。
OnEraseBkgnd()は自分で直接呼び出す関数じゃないです。
Invalidate()等の呼び出しにより間接的に呼ばれる(呼ばせる)ものなので、
自分で呼び出すと混乱が増えますよ。
そうでしたか。。。ありがとうございます。
では、クラスウィザードでBOOL CXXXView::OnEraseBkgnd(CDC* pDC) を作成し、
その中でriturn値をどうにかすればいいんでしょうかね?
OnDraw()の内容はどうなっているんですか?
大変失礼しました。
On_Drawと書いてあったのは、私の記述ミスでCXXXView::OnDraw()のつもりでした。
申し訳ありません。すっかり混乱させてしまってますね・・・ごめんなさい。
あと、島さんのレスを飛ばしてたので、それに対しての返事なんですけど、
絵の情報はButtonUpのときに配列として保持してあるのですが。
情報をもっていても、Invalidate()による再描画では最後の一つしか表示しないですよね?
どうすればよいでしょうか。
おそらく、モーモーさんのプログラムでは、
OnDraw()の中では、絵を一つしか書いてないのではないでしょうか?
正しく表示させるためには、OnDraw()の中で、全ての絵を書くようにする必要があります。
下記のイメージでお考え下さい。
変更前
CXXXXXView::OnDraw(...)
{
描画処理
}
CXXXXXView::OnLButtonDown(...)
{
・・・・・・
//On_Drawにある絵を描く関数に渡す引数(位置とBITMAPID)の設定//
Invalidate(FALSE);
//On_Drawにある絵を描く関数に渡す引数(位置とBITMAPID)の設定//
Invalidate(FALSE);
・・・・・・
}
変更後
CXXXXXView::OnDraw(...)
{
for(i=0;i<絵の枚数;i++)
{
i番目の絵のパラメータ設定(配列などから取り込み)
描画処理
}
}
CXXXXXView::OnLButtonDown(...)
{
・・・・・・
//On_Drawにある絵を描く関数に渡す引数(位置とBITMAPID)を配列に保存//
//On_Drawにある絵を描く関数に渡す引数(位置とBITMAPID)を配列に保存//
Invalidate(FALSE);
・・・・・・
}
返事遅くなってすみません。
REEさんのレス通りにやってみたらできました。
この掲示に関わっていただきました皆様には大変感謝しています。
超初心者の私を見捨てずに答えてくださり、ありがとうございましたm(__)m
また行き詰まったら顔(?)出すと思いますので、またよろしくお願いします。