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

我怎样才能做到这一点?

谢谢!

最佳答案

您不需要Form双缓冲,您需要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中没有的东西...

08-27 00:03