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();
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();
MemDC,并不是拷贝到屏幕上显示。
这样就在屏幕了吧。但是怎么在此前背景存在的情况下,拷贝到屏幕呢?
{
CClientDC dc(this);
dc.BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
}
MOUSEMOVE里的双缓冲 怎么实现。关键是,MOUSEMOVE的工具类不是从CObject继承。设备DC是直接从CClientDC dc( m_pMainView );视图获取过来的。但是这样,双缓冲,把背景也给冲掉了有什么好办法吗?
背景DC → 内存DC →设备DC
就是 带背景的了。