2

.NET Compact Frameworkで Windows フォームのOnPaintイベントをオーバーライドしようとしています。

これまでのところ、通常のコントロールでは通常不可能なグラデーション、角丸四角形などでコントロールを描画できます。

ただし、コントロールを非表示にしたい場合に問題が発生します。今、私がしていることは、目に見えないものを除くすべてのコントロールを再描画することです. 少し時間がかかるため、ちらつきが発生します。

Windowsが「見えない」コントロールの描画をどのように処理するか知っている人はいますか? または、これを達成する方法についてのアルゴリズムまたは方法を提案できますか。

4

2 に答える 2

1

やっていることがいくつかあるはずです。

  1. で渡された Graphics オブジェクトに直接ペイントしないでくださいOnPaint。バック バッファーに描画し、最後にそれを Graphics にペイントします。
  2. オーバーライドOnPaintBackgroundして、何もしないようにします。
  3. クリッピング領域を小さく保つために、可能な限り、画面全体ではなく、変化する領域のみを無効にします

単一のコントロールを「非表示」に変更する場合は、それを変更して、バウンディング rect だけを無効にします。Visibility プロパティに基づいて「見えない」コントロールを省略しOnPaintて、描画を行います。クリッピング領域のみが更新されます。入ってくるクリッピング領域をチェックして、OnPaintその領域を描画するロジックを描画するだけで、さらに一歩進めることもできます。ただし、これはもう少し複雑で、多くの場合必要ありません。

于 2012-11-27T16:58:36.520 に答える
0

別の方法として、適切なコントロールでInvalidate()メソッドのオーバーロードを呼び出して、再描画が必要なコントロールの総数を減らすことは可能でしょうか?

于 2012-11-27T15:46:40.723 に答える