使用双缓冲方式绘图,图上的部分区域完全是文字,这一部分好像每次刷新后,上次的内容还在.刷新几次以后文字就叠加的乱七八糟了。但图上其他区域的线条、文字的显示又是很正常的。
     让人感到奇怪的是,我采用的是双缓冲方式绘图,在内存中画完图后,用BitBlt再贴到窗口上。应该说上次的图应该已经被清除了,不应该会出现这种情况。

解决方案 »

  1.   

    重绘背景就会闪烁了,没必要双缓冲了,是不是bitblt最后一个参数不对呢?
      

  2.   

    用pDC->FillRect(rect, &CBrush(RGB(0,0,0)))这样填充后,依然有问题。
      

  3.   

    最后一个参数用的是SRCCOPY吗?
      

  4.   

    呵呵,设置下DC画图模式就好了。  SetROP2(hdc,R2_XORPEN);试试吧^_^.
      

  5.   

    Bitblt函数本身肯定不会有问题的,问题只能出在你的代码上
      

  6.   

    代码很简单,就是
         CFont类的CreateFont创建字体,
         然后SetTextColor设置文本颜色,
         然后用DrawText写文字,
         最后删除字体。这就是全部过程。
      

  7.   

    你这个pDC是窗口的DC还是后台的DC,对窗口的DC只需要做Bitblt,所有其它画图操作都应该在后台的DC。
      

  8.   

    http://blog.csdn.net/r3000/archive/2010/04/06/5454262.aspx
      

  9.   

    http://blog.csdn.net/joji_h/archive/2009/01/02/3684470.aspx
    网上搜了好多这样的"残影"问题都没个正经答案,没弄出来,
    好像BitBlt,StretchBlt这些个函数的问题?
    就是没高手来解惑啊!
      

  10.   

    好像往DC里先贴个图,然后再画个文体字串这样时,resize窗口就有残影之类的,
    BitBlt,StretchBlt贴图的时候,有人说既然背景时贴图了,就不用双缓冲了?
    释疑啊...
      

  11.   

    如果背景有图片而且还要变换窗口大小
    这样就需要缩放这张图
    就可能产生失真
    其实resize窗口不是什么技术问题
    是设计问题
      

  12.   

    缩放是什么意思?StretchBlt不就缩放了吗,
    pDC->SetStretchBltMode(COLORONCOLOR);//这个模式不设置的话会导致图片严重失真
    pDC->StretchBlt(...,SRCCOPY);
    其中SetStretchBltMode这行我忘了从哪里找的代码啦,它说可以防止失真但效果没看出来怎么滴;现在应该怎么设计呢(实现如下需求):
    1.基于对话框的;
    2.对话框的背景是一张图片;
    3.再在图片上画一串字(比如"hello world!");
    4.对话框可resize(resize时当然要求图片跟着缩放);
    5.要求无闪烁、无残影;
      

  13.   

    是不是 OnEraseBkground 在作怪?
    直接return true了?
      

  14.   

    我那天的问题解决了,原因是"多次使用双缓冲,双缓冲会失效",
    这样说也不准确,反正还是双缓冲使用方式有问题。一般来说如下OnPaint内这样使用是没问题的(只说OnPaint),
    OnPaint()
    {
    CPaintDC dc(this);//创建内存DC
    CDC dcMem;
    ...//先画到内存DC
    DrawXX1(&dcMem);
    DrawXX2(&dcMem);
    ...//最后在copy到目标DC
    dc.BitBlt(...);
    }
      

  15.   

    我也碰见这个问题了,所以不确定双缓冲是画好一幅图再bitblt还是画好一部分就bitblt,前者是不会出现前一块图没绘制的情况,后者会出现楼主的情况,应该在会好内存hdc之后再bitblt画到屏幕上,尽管这个帖子已经这么长时间了,还是想说明一下,以方便类似这种情况的学者。
      

  16.   


    pDC这个变量太可疑了。
    一般这个变量是指定屏幕的,你把屏幕给“黑”了有什么用?应该先“黑”MemDC。