私はカスタム図面を行う2つのコントロールを持つwinformsアプリケーションを持っています。メインコントロールは道路の長い連続画像の小さな部分を示し、もう1つのコントロールは道路画像全体の水平に押しつぶされた表示を示します。 2番目のコントロールは最初のコントロールをナビゲートするために使用されます。概要のどこかをクリックすると、メインビューのその場所にスクロールできます。ここでの主なビューは、上部および概要にあるスクリーンショットは、底部にあります:両方のコントロールを無効にすると、1つのコントロールが別のコントロールよりも頻繁に再描画されるのはなぜですか?
メインビューに示されている画像の位置を示す概要コントロールシアン線があります。 (このスクリーンショットでは、幅が左から1/3をわずかに超えています。)ユーザーは概要内のその行をクリックしてドラッグすると、メインビューがスクロールします。
私は、再描画について奇妙なことに気付きました。概要コントロールでシアンの線をドラッグすると、マウスの動きに応答して両方が無効になっていても、メインビューは概観よりずっと頻繁に再描画されます。キューに他のメッセージがないときにのみWM_PAINTメッセージが送信されることはわかっていますが、同時に両方が無効になっていると、あるコントロールが他のコントロールよりも頻繁に再描画される理由がわかりません。
実際、私はその最後の文章を入力していたので、私は理由を見つけたと思う。
各コントロールには独自のメッセージキューがあり、メインコントロールに入力関連のメッセージは受信されないため、メッセージキューはオーバービューよりも頻繁に空になります。すべてのマウスイベントを処理します。したがって、概要よりも頻繁にWM_PAINTメッセージを受信します。
この時点で、私は疑問を抱いています。「それは意味をなさないでしょうか?起こっていますか?」
概観の「道路画像全体の水平潰れ表現」はどのように達成されていますか?ペイント()イベントで計算を行っているのですか、またはデータを繰り返してカスタムのラインをペイントするカスタムですか?私はそれがメインビューよりも概観を描くのに単に時間がかかることを推測している。 –
@Idle_Mind、実際には、私は最近概要コントロールの描画を最適化して、最後のフルレンダーのビットマップを保持し、スクロール時にシアンラインを描画するだけのブリットを保持します。シーンが実際に変更されたときにのみビットマップが更新されます。これはまれであり、スクロール中にはまったく起こりません。しかし、メインビューよりオーバービューをレンダリングするのに時間がかかっても、同じ周波数で起こっていると、その効果は一般的な低迷になります。これは私が見ているものではありません。メインコントロールは、マウスイベントに追いついていますが、概要は表示されません。 – adv12