不直接使用form的CreateGraphics創建Graphics進行繪制,可以先在Form上面放一個需要大小的PictureBox,再創建一個同大小的Bitmap,將這個Bitmap設置為PictureBox的Image。再在這個Bitmap上進行繪制,這樣拖動resize之類就不會閃爍了。
代碼片段:
PictureBox ImageBox = null; Bitmap RenderTarget = null; Size RenderSize = new Size();
public RenderForm() { InitializeComponent(); ImageBox = new PictureBox(); ImageBox.Size = Properties.Resources.background.Size; ImageBox.Parent = this; renderSize = new Size(StatTools.Properties.Resources.background.Width, StatTools.Properties.Resources.background.Height); } public Size renderSize { get { return RenderSize; } set { if(RenderTarget == null || RenderTarget.Width != value.Width || RenderTarget.Height != value.Height) { RenderTarget = null; RenderTarget = new Bitmap(value.Width, value.Height); ImageBox.Size = new Size(value.Width, value.Height); ImageBox.Image = RenderTarget; } RenderSize = value; } } private void RenderForm_Paint(object sender, PaintEventArgs e) { if( CurrentRender != null ) { var GFX = Graphics.FromImage(RenderTarget); CurrentRender.OnDraw(GFX, renderSize.Width, renderSize.Height); } }