日期:2014-05-18  浏览次数:20906 次

自定义控件GDI+绘图闪烁问题,请高手帮忙分析下简化的代码
[code=C#][/code]
//控件构造函数  
public GanttChart()
{
  //先绘制位图作为背景
  objBmp = new Bitmap(1280, 1024, System.Drawing.Imaging.PixelFormat.Format24bppRgb);//定义位图
  objGraphics = Graphics.FromImage(objBmp);//绘制图片,作为背景

  //无闪烁绘制的设定
  this.SetStyle(ControlStyles.DoubleBuffer, true);
  this.SetStyle(ControlStyles.UserPaint, true);
  this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);


}


//重绘方法
 private void PaintChart(Graphics gfx)
{
  DrawMarkEllipse(gfx, rectangleLTPoint, rectanglesideLength, rectanglesideHigh);//绘制标记椭圆

   
  objBmp = new Bitmap(this.Width - barStartRight, lastLineStop, System.Drawing.Imaging.PixelFormat.Format24bppRgb);//前两个参数为宽和高
  objGraphics = Graphics.FromImage(objBmp);

   
   
}

//画椭圆方法定义
private void DrawMarkEllipse(Graphics gfx, Point rectangleleftup, int length, int height)
{
   
  Graphics graphics = this.CreateGraphics();
  Pen mark = new Pen(Color.Black, 3);
  Rectangle rectangleside = new Rectangle(rectangleleftup.X, rectangleleftup.Y, length, height);
  graphics.DrawEllipse(mark, rectangleside);


   
   
 }

//双击事件中,调用重绘方法
  protected override void OnMouseDoubleClick(MouseEventArgs e)
{
  PaintChart(gfx); //我想在控件上双击一下,就在控件相应位置画一个椭圆  
   
}

问题是可以画出椭圆,但是我鼠标在控件界面上移动时,椭圆是在不断闪烁(就是一会有,一会无,交替出现,频率很快)??这是怎么回事,我的代码怎么改进可以让他不闪烁???

------解决方案--------------------
绘图放在OnPaint中,老生常谈了

先看看MSDN再做
------解决方案--------------------
PaintChart(gfx);放到OnPaint中,使用OnPaint中e.Graphics绘制,鼠标点击时,Invalidate 重绘