大家帮忙看一下下面的代码,我只是想创建m_memBitmap。
我首先是从菜单的文件---打开打开一张地图。
然后在OnDraw中,我想创建一个一样大小的图片。
但是总是出错误!str显示的也是图片的实际大小,可是就是不显示创建成功!
怎么回事呢?是CMyDocument中出错了吗?
用注释掉的加载位图资源,然后创建的就可以成功。
请大家帮忙啊!!!
void CMyView::OnDraw(CDC* pDC)
{
    CMyDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if(m_bFirstDrawMap)//首次绘制
    {
// storeBitmap.LoadBitmap(IDB_BITMAP1);
// storeBitmap.GetBitmap(&m_bm); CBitmap* pBitmap=pDoc->GetBitmap();
if(pBitmap == NULL)
            return ;
pBitmap->GetBitmap(&m_bm);
CString str;
str.Format("%d,%d",m_bm.bmWidth, m_bm.bmHeight);
AfxMessageBox(str); if(m_memDC.CreateCompatibleDC(pDC))
{
    if(m_memBitmap.CreateCompatibleBitmap(pDC,m_bm.bmWidth, m_bm.bmHeight))
    {
AfxMessageBox("Create Successfully");
m_memDC.SelectObject(&m_memBitmap);
    }
}
m_bFirstDrawMap = FALSE;
    }
}

解决方案 »

  1.   

    错误是我的CreateCompatibleBitmap(pDC, bm.bmWidth, bm.bmHeight)返回值为空
      

  2.   

    位图根本就没有装载,所以CreateCompatibleBitmap(pDC, bm.bmWidth, bm.bmHeight)返回值为空下面的代码是双缓冲画图方法:CDC tMemDC;
    if( tMemDC.CreateCompatibleDC(pDC) )
    {
    CRect rect;
    GetClientRect(&rect);

    CBitmap tBitmap;
    if(tBitmap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom))
    {
    CBitmap* pOldBitmap = tMemDC.SelectObject(&tBitmap);                  CDC memDC;
             memDC.CreateCompatibleDC(&tMemDC);
                      memDC.SelectObject(m_memBitmap);
                      tMemDC.StretchBlt(nPosX, nPosY, nWidth, nHeight, &memDC, 
    0, nWidth*0, nWidth, nHeight, SRCCOPY);                  pDC->BitBlt(rect.left, rect.top, rect.right, rect.bottom,
    &memDC, 0, 0, SRCCOPY); tMemDC.SelectObject( pOldBitmap ); 
    tBitmap.DeleteObject();
    tMemDC.DeleteDC();
    ReleaseDC(&tMemDC);
             }
    }
      

  3.   

    错了一点,
    pDC->BitBlt(rect.left, rect.top, rect.right, rect.bottom,
    &memDC, 0, 0, SRCCOPY);
    应该改为
    pDC->BitBlt(rect.left, rect.top, rect.right, rect.bottom,
    &tMemDC, 0, 0, SRCCOPY);