我写的程序有问题,请各位大侠帮我看看:
我在客户区加载了一副图片,我在对图片进行处理的时候想通过双缓存技术来防止屏闪烁。我在C...View类中新建了一个函数如下
void CSALSView::ShowBmpUseDbBuffer()
{
CSALSDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CDib* pDib = pDoc->m_pDib;
CDC *pDC = GetDC();
CBitmap BmpFront,BmpMem; //前景,内存位图
CDC FrontDC,MemDC; //前景设备,内存设备
//创建与显示设备兼容的位图(内存位图)
BmpMem.CreateCompatibleBitmap(pDC, 800, 600);
//加载位图
BmpFront.LoadBitmap((LPCTSTR)pDib);       //?????????????
//创建与显示设备兼容的设备
FrontDC.CreateCompatibleDC(pDC);
MemDC.CreateCompatibleDC(pDC);
//将位图选入设备
MemDC.SelectObject(&BmpMem);
//将前景位图选入设备
FrontDC.SelectObject(&BmpFront);
MemDC.BitBlt(0, 0, 800, 600, &FrontDC, 0, 0, SRCCOPY);
//只一次性的向显示设备显示位图,不会出现闪屏  
//BitBlt函数就是从指定的设备上下文拷贝位图,也即是从创建的内存设备上拷贝位图
pDC->BitBlt(0, 0, 800, 600, &MemDC, 0, 0, SRCAND);
//释放资源
pDC->DeleteDC();
FrontDC.DeleteDC();
MemDC.DeleteDC();
........................(以下我图像操作的一些代码略)
}
     
我在C...Doc类中响应打开图片的消息:
void C...Doc::OnButtonOpenpic() 
{
// TODO: Add your control notification handler code here
CFileDialog fileOpenDlg(TRUE,"bmp","*.bmp",NULL,"Bitmap Files(*.bmp)",NULL);
int nRespond = fileOpenDlg.DoModal();
if(nRespond == IDOK)
{
CString filePath = fileOpenDlg.GetPathName();
m_pDib = new CDib(filePath);   //CDib* m_pDib;
if(m_pDib->IsValid())
SetTitle(filePath);
else
DeleteContents();
}
m_bPicOpen = TRUE;
UpdateAllViews(0);
}
在这里m_pDib为设备无关位图,在第一段代码中创建设备相关位图BmpMem.CreateCompatibleBitmap(pDC, 800, 600);后BmpFront.LoadBitmap函数需要加载的是设备相关位图。我那里面的参数写的不对,请问该如何写啊?
我用的方法有什么错误,如何才能正确的实现双缓存防止闪屏??请各位大侠们帮帮忙,万分感谢!!!!!!!!