大家帮忙看一下下面的代码,我只是想创建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;
}
}
我首先是从菜单的文件---打开打开一张地图。
然后在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;
}
}
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);
}
}
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);