主要是有一个panel,我要在panel里面加载一张图片,由于图片比较大,需要能通过触摸屏移动图片。所以我实现了mouseMove事件,每次计算坐标,而后对panel进行refresh()操作。
在panel的paint事件的实现中,使用了双缓冲的方法,先在建立一张与panel同样大小的Image,而后对其画图,画完之后再传给绘图区……可问题在于,每次移动图片的时候PPC都闪得厉害,不知道该如何解决,望各位网友指点一二。主要代码如下:
 private void panelMap_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
 {
     if (mouseIsDown == true)
     {
        this.presentPoint.X = this.lastPoint.X + (e.X - this.downPoint.X) * 2;
        this.presentPoint.Y = this.lastPoint.Y + (e.Y - this.downPoint.Y) * 2;
        this.panelMap.Refresh();
      }
 } private void panelMap_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
 {
   Graphics g;   if (this.bufferMap == null)
   {
       this.bufferMap = new Bitmap(this.panelMap.Width, this.panelMap.Height);
   }   g = Graphics.FromImage(this.bufferMap);   g.DrawImage(this.imgMap, this.presentPoint.X, this.presentPoint.Y);   e.Graphics.DrawImage(this.bufferMap, 0, 0);
}

解决方案 »

  1.   

    参看:
    http://www.codeproject.com/cs/media/flickerFreeDrawing.asp
      

  2.   

    zlkingdom(风之悲伤) :您好。
    您说的没错,是由于在mousemove的时候一直调用refresh()函数使得屏幕闪动的。我的开发样机是HP的,上面有个图像浏览工具叫HP Image Zone,在上面拖动图像就能很好的得到响应而且不会闪动。所以实时响应拖动还是可能的,肯定是我的方法哪里出了问题。谢谢
      

  3.   

    Knight94(愚翁):您好,您介绍的文章我看过了,还是不行的。在PPC上闪得厉害。