有一段代码不解:(注:m_dcBK为CDC类型, m_bmpBK,m_bmpBKOld为CBitmap类型)
CClientDC clientDC(GetParent());
CRect crect;
GetClientRect(crect);
if (m_dcBk.m_hDC == NULL)
{
    m_dcBk.CreateCompatibleDC(&clientDC);
    m_bmpBk.CreateCompatibleBitmap(&clientDC, crect.Width(), crect.Height());
    m_bmpBkOld = m_dcBk.SelectObject(&m_bmpBk);
    m_dcBk.BitBlt(0, 0, crect.Width(), crect.Height(), &clientDC, wrect.left, wrect.top, SRCCOPY);
}我理解应该是把clientDC的画面拷贝到m_dcBK里,但是为什么会出现m_dcBk.SelectObject(&m_bmpBk);?按道理应该是clientDC SelectObject后再调用BitBlt的.但是我以往都是在复制源SelectObject的而不是复制目标SelectObject的,在这段程序如果这样做却无效果.为什么呢?还是我理解错程序呢?

解决方案 »

  1.   

    把clientDC的bmp BitBlt 到m_dcBk的bmp中,有什么好奇怪的
      

  2.   

    CDC像一张黑板, bitmap像一张纸.如果你把图片内容直接画在黑板上,能取下来吗?所以先钉一张纸到黑板上,然后进行绘画,内容就在纸上了.画完后用原来的纸(m_bmpBkOld)把你钉上去的那张纸"顶"下来,你就可把那张画取下来,到处贴了.
      

  3.   

    Cline(营营[无意苦争春,贯看群芳谢])  
    ----------------------------------------
    高人