双缓冲问题,不能够正确的绘制出来
http://xa.ctfs.ftn.qq.com/ftn_handler/aed4b06542eeb5599e02542be5668942fefe25c6691aac7ebcfb382e162fa4d72e040eaea614bbeb052826063239e2fee4509adf17669e764b1d487baf00a598/?fname=DBBTest_459.zip&k=7939393472b0c7c635ba131310370a165b0d5d0701015a5f140e5f04041a0c0000001456530001140e005c050503005f085d5805363c387d7b7b6d514543164350493909&fr=00&&txf_fid=61bf336297f2787e7d0db0a7aa0b92f6b3035679&xffz=30908
3个dc(其中2个是内存dc)
第一个dc上不断的绘制 圆, 第二个是贴一张图, 第二个拷贝到第一个的中间,最后把第一个dc拷贝第3个dc(即:
设备dc上 ,结果失败了)
源码已经上传
CRect rt;
this->GetClientRect(&rt);
// 为屏幕DC创建兼容的内存DC
if(!m_dcMemory.CreateCompatibleDC(NULL))
{
::PostQuitMessage(0);
}
// 创建位图
m_Bmp.CreateCompatibleBitmap(&m_dcMemory, rt.Width(), rt.Height());
// 相当于选择画布
::SelectObject(m_dcMemory.GetSafeHdc(), m_Bmp);
HBITMAPhBitmap=(HBITMAP)LoadImage(0,"c:\\1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
//第三个dc
CDC* pDc=GetDC();
m_dcMemory2.CreateCompatibleDC(pDc);
m_dcMemory2.SelectObject((HGDIOBJ)hBitmap);
ReleaseDC(pDc);
//另外一段代码
//////////////////////////////////////////
CRect rt;
this->GetClientRect(&rt);
m_dcMemory.FillSolidRect(&rt, RGB(255,255,255));// 白色填充, 注意,这次是画在内存设备环境上
// 画圆
for(int i = 0; i < rt.Width() - 1; i+= 16)
{
for(int j = 0; j < rt.Height() - 1; j+= 16)
{
m_dcMemory.Ellipse(i, j, i + m_nRadius, j + m_nRadius);
}
}
m_dcMemory.BitBlt(rt.Width()/4,rt.Height()/4,rt.Width()/2,rt.Height()/2,&m_dcMemory2,0,0,SRCCOPY);
Invalidate();
//第3段代码
///////////////////////////////////////
void CDBBTestView::OnDraw(CDC* pDC)
{
CDBBTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CRect rc;
GetClientRect(&rc);
if(m_bStart)
{
pDC->BitBlt(0, 0, rc.Width(), rc.Height(), &m_dcMemory, 0, 0, SRCCOPY);
}
else
{
pDC->FillSolidRect(&rc,RGB(255,255,255));
}
}
void CDBBTestView::InitialDBB()
{
CRect rt;
this->GetClientRect(&rt);
CDC *pDC=GetDC();
// 为屏幕DC创建兼容的内存DC
if(!m_dcMemory.CreateCompatibleDC(pDC))
{
::PostQuitMessage(0);
}
// 创建位图
m_Bmp.CreateCompatibleBitmap(pDC, rt.Width(), rt.Height());
// 相当于选择画布
m_dcMemory.SelectObject(m_Bmp);
//::SelectObject(m_dcMemory.GetSafeHdc(), m_Bmp);
HBITMAPhBitmap=(HBITMAP)LoadImage(0,"D:\\my\\Picture_2012_12_28_15_21_16.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
//第三个dc
m_dcMemory2.CreateCompatibleDC(pDC);
m_dcMemory2.SelectObject((HGDIOBJ)hBitmap);
ReleaseDC(pDC);
}