我是在线程中用while循环画图,但是画的图总是在不停闪烁,很晃眼,不知道有什么好的办法没?
我听说过双缓存,不知道对我这个问题有没用处。如有例子代码,将不胜感谢!

解决方案 »

  1.   

    双缓充
    就是先画在一个内存DC上
    再画在设备DC上例,
    OnDraw(CDC *pDC)
    {
       CDC *MemDC;
       MemDC->.....;
       pDC->BitBlt(0,0,400,400,&MemDC,0,0,SRCCOPY);
    }
      

  2.   

    你可以使用一个类,给我发邮件我我给你一份事例代码[email protected]
      

  3.   

    双缓冲是可以,但是最好还是用DDraw来做,或者d3d
    ddraw/d3d直接访问显存,速度更快一些双缓冲的例子很多的
        CRect rcClient;
        GetClientRect(rcClient); // See Note 1    CDC MemDC,*pDC;
        CBitmap MemBitmap;    pDC = this->GetDC()         // Get Current DC
        MemDC.CreateCompatibleDC(pDC);
        MemBitmap.CreateCompatibleBitmap(pDC,rcClient.right,rcClient.bottom);    CBitmap *pOldBitmap = MemDC.SelectObject(&MemBitmap);
        CBrush bkBrush(HS_FDIAGONAL,RGB(0,rand()%255,0)); // See Note 2
        MemDC.FillRect(rcClient,&bkBrush);    pDC->BitBlt(0,0,rcClient.right,rcClient.bottom,&MemDC,0,0,SRCCOPY); //See Note 3
        MemDC.SelectObject(pOldBitmap);Note 1 : Gets the coordinates of the bounding rectangle.
    Note 2 : Creates a brush with random shades of green. The rand()%255 generates a value between 0 and 255 randomly. 
    Note 3 : Copies the bitmap from the memory dc to the pdc using a fast bitblt function call.
      

  4.   

    www.codeproject.com 搜索 flicker 可以找到很多的例子
      

  5.   

    happy__888([顾问团]寻开心)      谢谢你刚才的回答。我说的这个进程窗口不是自己的进程窗口而是其他进程的,你说双缓冲,ddraw,d3d能用的上吗?我看到他们说的要用到双缓冲还需要在onpaint或者其他地方重绘,都是针对本进程的,但是我没法在别的进程中onpaint里做这些