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 回答