こんにちは。
ダイアログに貼り付けたピクチャーに対して折れ線グラフを描画するアプリを作ってま
す。
このグラフにマウスを合わせた際にマウスポイントを中心に縦線横線を表示させようとし
ています。
ここまでは実現できているのですが、マウスを動かした時にグラフが消えて行ってしまう
ので困ってます。
現状の処理はOnpaintにてグラフ描画、OnMouseMoveにて古い縦横線を削除・新しい縦横線
描画です。
古い縦横線を削除するのに白でLineToを使っている(グラフ背景が白)ので、グラフが消え
ていってしまうのは当然なのですが、
これを回避する良い方法があれば教えて頂きたいのです。
OnMouseMove時にUpdateWindowでは更新されず、InvalidateRectでは画面がちらついてし
まいます。
苦肉の策としてタイマーイベントで画面を更新してみたのですが、マウススピードによっ
ては
どうしても線が消えるのが目立ってしまいます。
ピクチャーをもう一つ重ねてグラフ描画と縦横線描画を別のコントロールにしてみても回
避されず。
そもそも発想自体が違うのでしょうか。
何か良い方法があれば是非御教授下さい。
宜しくお願いします。
環境
WindowsXP Pro
VC 6.0
MFC ダイアログベース
ダイアログ自身の描画とピクチャーコントロール自身にも描画(OnPaint)があるので注意。
よくダイアログのOnPaintで描画した後にピクチャーコントロールが自分を描画してしま
うなんてオチがある。
背景画像は自分で何とかするしかないよ。
ダブルバッファリングとかちらつきで検索すれば情報見つかるんじゃない。
てか見つかるといいね。
ちらつく理由は背景を白とかグレーで塗りつぶす処理があるからだよ。
WM_ERASEBKGND(スペル?)を調べてごらん。
あと、親ウィンドウにWS_CLIPCHILDRENとかあったほうがいいかな。
親ウィンドウが子ウィンドウの領域を描画出来てしまわないように。
実際のところどうなるかよくわからないけどね。
XORで線を引くっていう手もあるね。
XORならもう一度同じ条件で書くと元の色に戻るから。
組み合わせによってはわかりにくい色になるけど。
大きい画面ならInvalidateRectで不必要な領域の描画を省けばいい。
でも、そんなことしなくてもいまどきBitBltぐらいあっという間に終わるか。
InvalidateRect使わすにOnMouseMove時に
古い線を消すと線を描くを行ってしまってもいいし。
早速の回答・多数のアドバイス有難う御座います。
一通り調べ試してから又報告しに来ますね。
お世話になります。
アドバイス頂いたダブルバッファを実装する事により、
思い通りの挙動にする事ができました。
WM_ERASEBKGNDとかも調べてみましたが、今回はダブルバッファで行こうと思います。
OnMouseMoveでの線描画を止めポイントのみ内部保持するようにし、
OnPaintにてグラフ描画時に、古い縦横線を削除・新しい縦横線描画と変更し、
問題なく動いています。
教えて頂いた方法はどれも知らない事ばかりだったので、一通り調べてみます。
今回は有難う御座いました。とても助かりました。
又宜しくお願いします。