开发一IM程序,在richtextbox控件中加入GIF图片后,虽然可以显示动画,但闪烁的比较厉害,双缓存也没有效果。图片是利用OLE对象的方式插入的。
部分代码如下:
        private void richtextboxOnFrameChanged(object sender, EventArgs e)
        {//每次帧切换,重新绘制RTF控件
            this.richtextbox.Invalidate();
        }
        private void insertpic()//插入图片
        {
....
             if (ImageAnimator.CanAnimate(pic.Image))//是否包含帧结构
             {
                   System.Drawing.ImageAnimator.Animate(pic.Image, new System.EventHandler(this.richtextboxOnFrameChanged));
....
             }
        }
请大家帮帮忙,谢谢!

解决方案 »

  1.   

    另外,我也通过另一种方式实现了不闪烁,就是在richtextboxOnFrameChanged事件中修改如下:
                if (RAL != null)
                {
                    for (int i = 0; i < RAL.Count; i++)
                    {
                        this.richtextbox1.Invalidate();//逐一刷新每个动态图片
                    }
                }
    但这样做一方面是系统开销比较大,另外滚动条也有问题,就是当有图片处于RTF顶端的时候,向下拉滚动条时顶端的GIF图片要么全部显示,要么显示不出来,这应该是刷新时产生的问题,但处于滚动条下面的图片就没有问题,可以只显示出一部分,滚动条不发生跳跃。我对WINDOWS的窗口绘制机制不清楚,为什么同样是绘制图片,处于不用位置的图片绘制效果却不一样????请高手指点,谢谢大家!!!!
      

  2.   

    MSN和淘宝旺旺这方面做的就非常好,没有闪烁的问题,不清楚是用什么方式实现的。