グラフ画面の表示更新 – プログラミング – Home

通知
すべてクリア

[解決済] グラフ画面の表示更新


kendi
 kendi
(@kendi)
ゲスト
結合: 18年前
投稿: 3
Topic starter  

こんにちは。

ダイアログに貼り付けたピクチャーに対して折れ線グラフを描画するアプリを作ってま
す。
このグラフにマウスを合わせた際にマウスポイントを中心に縦線横線を表示させようとし
ています。
ここまでは実現できているのですが、マウスを動かした時にグラフが消えて行ってしまう
ので困ってます。
現状の処理はOnpaintにてグラフ描画、OnMouseMoveにて古い縦横線を削除・新しい縦横線
描画です。
古い縦横線を削除するのに白でLineToを使っている(グラフ背景が白)ので、グラフが消え
ていってしまうのは当然なのですが、
これを回避する良い方法があれば教えて頂きたいのです。
OnMouseMove時にUpdateWindowでは更新されず、InvalidateRectでは画面がちらついてし
まいます。
苦肉の策としてタイマーイベントで画面を更新してみたのですが、マウススピードによっ
ては
どうしても線が消えるのが目立ってしまいます。
ピクチャーをもう一つ重ねてグラフ描画と縦横線描画を別のコントロールにしてみても回
避されず。
そもそも発想自体が違うのでしょうか。
何か良い方法があれば是非御教授下さい。
宜しくお願いします。

環境
WindowsXP Pro
VC 6.0
MFC ダイアログベース


引用未解決
トピックタグ
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

ダイアログ自身の描画とピクチャーコントロール自身にも描画(OnPaint)があるので注意。
よくダイアログのOnPaintで描画した後にピクチャーコントロールが自分を描画してしま
うなんてオチがある。

背景画像は自分で何とかするしかないよ。
ダブルバッファリングとかちらつきで検索すれば情報見つかるんじゃない。
てか見つかるといいね。

ちらつく理由は背景を白とかグレーで塗りつぶす処理があるからだよ。
WM_ERASEBKGND(スペル?)を調べてごらん。

あと、親ウィンドウにWS_CLIPCHILDRENとかあったほうがいいかな。
親ウィンドウが子ウィンドウの領域を描画出来てしまわないように。
実際のところどうなるかよくわからないけどね。


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

XORで線を引くっていう手もあるね。
XORならもう一度同じ条件で書くと元の色に戻るから。
組み合わせによってはわかりにくい色になるけど。

大きい画面ならInvalidateRectで不必要な領域の描画を省けばいい。
でも、そんなことしなくてもいまどきBitBltぐらいあっという間に終わるか。

InvalidateRect使わすにOnMouseMove時に
古い線を消すと線を描くを行ってしまってもいいし。


返信引用
kendi
 kendi
(@kendi)
ゲスト
結合: 18年前
投稿: 3
Topic starter  

早速の回答・多数のアドバイス有難う御座います。
一通り調べ試してから又報告しに来ますね。


返信引用
kendi
 kendi
(@kendi)
ゲスト
結合: 18年前
投稿: 3
Topic starter  

お世話になります。
アドバイス頂いたダブルバッファを実装する事により、
思い通りの挙動にする事ができました。
WM_ERASEBKGNDとかも調べてみましたが、今回はダブルバッファで行こうと思います。
OnMouseMoveでの線描画を止めポイントのみ内部保持するようにし、
OnPaintにてグラフ描画時に、古い縦横線を削除・新しい縦横線描画と変更し、
問題なく動いています。
教えて頂いた方法はどれも知らない事ばかりだったので、一通り調べてみます。
今回は有難う御座いました。とても助かりました。
又宜しくお願いします。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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