【问题标题】:c# CF, WinForms and double bufferc# CF、WinForms 和双缓冲
【发布时间】:2009-02-22 13:58:06
【问题描述】:

我有一个 CF 2.0 应用程序,表单上有一个 PictureBox。我想通过鼠标移动来移动PictureBox,我需要在表单中添加Double Buffer以避免闪烁。

我该怎么做?

谢谢!

【问题讨论】:

    标签: c# winforms compact-framework doublebuffered


    【解决方案1】:

    你不需要双缓冲的表单,你需要的是 PB。这在CF中并不容易。但是,您可以创建自己的控件,PB 非常简单。例如:

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    public class MyPictureBox : Control {
      private Image mImage;
      public Image Image {
        get { return mImage; }
        set { mImage = value; Invalidate(); }
      }
      protected override void OnPaintBackground(PaintEventArgs pevent) {
        // Do nothing
      }
      protected override void OnPaint(PaintEventArgs e) {
        using (Bitmap bmp = new Bitmap(this.ClientSize.Width, this.ClientSize.Height)) {
          using (Graphics bgr = Graphics.FromImage(bmp)) {
            bgr.Clear(this.BackColor);
            if (mImage != null) bgr.DrawImage(mImage, 0, 0);
          }
          e.Graphics.DrawImage(bmp, 0, 0);
        }
        base.OnPaint(e);
      }
    }
    

    希望我没有使用 CF 中没有的东西...

    【讨论】:

    • PB? PB是什么意思?
    • 它不起作用。我需要在 Form 上使用双缓冲,因为我移动了整个 PictureBox(我认为)。
    • 这是正确的代码,但您需要做的是创建一个像这样绘制的容器(例如面板)。最糟糕的情况是,您必须将图片框换成您在面板内手动绘制和控制的自定义内容。
    • 在绘制需要时间的复杂事物时也能发挥魅力。我预先分配位图,在需要时调整它的大小(在 Form.ResizeEnd 上),将东西(具有 1000 个点的样条线)绘制到位图中,并将位图绘制到 PB 中。
    猜你喜欢
    • 2011-04-12
    • 1970-01-01
    • 2011-03-05
    • 2011-10-16
    • 1970-01-01
    • 2012-12-18
    • 2019-06-12
    • 2014-10-07
    相关资源
    最近更新 更多