動的に値の上限が変わるスクロールバーの制御をするには?


けーぼう  2004-10-29 04:13:37  No: 54921

横軸を時間軸としたグラフにスクロールバーを取り付けようとしています。
グラフは、タスクマネージャの「CPU使用率」グラフのように、時間とともに右に流れて行き、画面からはみだします。
このグラフの過去の履歴を、スクロールで見ることができるようにしようとしています。

スクロールバーを取り付け、グラフが停止状態の時はスクロールで、過去の履歴を見ることができるようになったのですが、グラフが動いている時、つまり、タイマーイベントで定期的にスクロールバーのScrollRangeのMax値が増えている時、スクロールバーをドラッグ移動すると、Max値が増えるタイミングで、ドラッグしているはずのバーが動いてしまいます。
このバーを動かさない為には、どのようにするのが良いでしょうか。
スクロールバーの詳しい仕様等、何か参考になるものがあれば、教えてください。

□試したけどダメだったやり方
maxを増やす処理を以下のようにしてみましたところ、バーが動く幅は減りましたが、微妙に動いてしまいます。また、バーを一番左までスクロールさせた時の挙動がヘンでした。

pSBar->GetScrollRange(&lastMin, &lastMax);
lastPos = pSBar->GetScrollPos();
pSBar->SetScrollRange(newMin, newMax);
pSBar->SetScrollPos(newMin + ((newMax - newMin) * (lastPos - lastMin) / (lastMax - lastMin)));

□環境
Windows XP SP1
VC .Net


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加