0

私のアプローチの問題は、フォームのサイズを変更するときに、描画された画像、テキスト、または線がおそらく0.2秒遅れることです。したがって、右下隅に画像が必要な場合は、サイズ変更後、0.2秒で配置されます。また、大幅なサイズ変更を行うと、フォームが大画面で拡大する間、1-2FPSまで遅れ始めます。サンプルコードは次のようになります(VB.NET):

Public Class Form1
  Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
    MyBase.OnPaint(e)
    Dim icon As Icon = SystemIcons.Exclamation
    Dim imageWidth As Integer = icon.Width
    Dim imageHeight As Integer = icon.Height
    e.Graphics.DrawIcon(icon, Me.ClientRectangle.Right - imageWidth,
                              Me.ClientRectangle.Bottom - imageHeight)
  End Sub
  Private Sub Form1_Resize(sender As Object, e As System.EventArgs) Handles Me.Resize
    Me.Invalidate()
  End Sub
End Class

スムーズにするためにできることはありますか?

4

2 に答える 2

2

Windowsフォームには、画面をダブルバッファリングするためのスタイル設定が用意されています。これはあなたのために多くのセットアップを行います。

また、ダブルバッファリングにより、画面をクリアする必要がなくなるため、基本クラスを呼び出さずにOnPaintBackgroundオーバーライドして戻ることで、とにかく表示されない多くの作業を防ぐことができます。

GDI + / winformsダブルバッファリングの最良の例のいくつかについては、私のアニメーション の例を確認してください。

于 2012-10-25T18:43:18.150 に答える
1

ウィンドウのサイズを変更するには、常に新しい場所に画像を再描画する必要があります。ただし、再描画をより効率的にする場合とできない場合がある、試すことができることがいくつかあります。

  1. フォーム全体ではなく、画像の新旧の位置のみを無効にします。これは、変更されないウィンドウの部分をペイントする必要がないことを意味します。
  2. 古い場所から新しい場所に画像をコピーします。ここでは、ウィンドウの右側の部分を無効にするように注意する必要があります。特に、ウィンドウが小さくなり、古い画像領域と新しい画像領域が重なっている場合は注意が必要です。
  3. 画像用に別のコントロールを作成し、コントロールを正しい場所に移動します。フォームとコントロールは、正しい領域を自動的に無効にします。
于 2012-10-10T20:08:07.737 に答える