CRect rect;
m_pMainView->GetWindowRect(&rect); CDC MemDC;   //首先定义一个显示设备对象 
CBitmap MemBitmap;//定义一个位图对象 

//随后建立与屏幕显示兼容的内存显示设备 
MemDC.CreateCompatibleDC(NULL); 
MemBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height() ); 

//将位图选入到内存显示设备中 
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);  // MemDC.FillSolidRect(0,0,rect.Width(),rect.Height(),pDC->GetBkColor()); //拷贝背景图 
CDC MemBackDC; 
MemBackDC.CreateCompatibleDC(NULL); 
CBitmap MemBKBitmap;
MemBKBitmap.CreateCompatibleBitmap(&MemBackDC,rect.Width(),rect.Height() );
MemBackDC.SelectObject(&MemBKBitmap);  MemBackDC.BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY); 
                  Draw(&MemDC); //绘图过程 //将内存中的图拷贝到屏幕上进行显示 
MemDC.BitBlt(0,0,rect.Width(),rect.Height(),&MemBackDC,0,0,SRCCOPY); MemBitmap.DeleteObject(); 
MemDC.DeleteDC();
MemBKBitmap.DeleteObject();
MemBackDC.DeleteDC();

解决方案 »

  1.   

     MemDC ,emBackDC 都是内存dc;MemDC.BitBlt(0,0,rect.Width(),rect.Height(),&MemBackDC,0,0,SRCCOPY);//这步只是从MemBackDC 拷贝位图到 
    MemDC,并不是拷贝到屏幕上显示。
      

  2.   

    主要是在,Draw(&MemDC); //模拟绘图过程pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY); 
    这样就在屏幕了吧。但是怎么在此前背景存在的情况下,拷贝到屏幕呢?
      

  3.   

    OnPaint()
    {
        CClientDC dc(this);
        dc.BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);  
    }
      

  4.   

    http://d.download.csdn.net/down/2715725我传了软件,大家可以帮忙看看。
    MOUSEMOVE里的双缓冲 怎么实现。关键是,MOUSEMOVE的工具类不是从CObject继承。设备DC是直接从CClientDC dc( m_pMainView );视图获取过来的。但是这样,双缓冲,把背景也给冲掉了有什么好办法吗?
      

  5.   

    http://download.csdn.net/source/2715725链接发错了。是这个
      

  6.   

    做好了。
    背景DC → 内存DC →设备DC
    就是 带背景的了。