源码如下
void CShowbitmapView::OnDraw(CDC* pDC)
{
CShowbitmapDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); CBitmap m_Bitmap;
m_Bitmap.LoadBitmap("C:\Temp\WAS3679.tmp");
pDC->CreateCompatibleDC(NULL);
pDC->SelectObject(&m_Bitmap);
CClientDC ClientDC(this);
BITMAP BM;
m_Bitmap.GetObject(sizeof(BM), &BM);
ClientDC.BitBlt(0,0,BM.bmWidth, BM.bmHeight,pDC,0,0,SRCCOPY);
}问题在哪儿呢?其他的地方都没有不良代码,编译通过,run的时候报debug的错误
debug assertation failed
void CShowbitmapView::OnDraw(CDC* pDC)
{
CShowbitmapDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); CBitmap m_Bitmap;
m_Bitmap.LoadBitmap("C:\Temp\WAS3679.tmp");
pDC->CreateCompatibleDC(NULL);
pDC->SelectObject(&m_Bitmap);
CClientDC ClientDC(this);
BITMAP BM;
m_Bitmap.GetObject(sizeof(BM), &BM);
ClientDC.BitBlt(0,0,BM.bmWidth, BM.bmHeight,pDC,0,0,SRCCOPY);
}问题在哪儿呢?其他的地方都没有不良代码,编译通过,run的时候报debug的错误
debug assertation failed
::LoadImage(AfxGetInstanceHandle(),
m_ImageName,IMAGE_BITMAP,0,0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE)
再SelectObject,BitBlt就OK了你debug到m_Bitmap.LoadBitmap("C:\Temp\WAS3679.tmp");
就能看到失败了
你可以用CreateBitmap()来做
应该是
m_Bitmap.LoadBitmap("C:\\Temp\\WAS3679.tmp");吧
1。路径错了,应该是("C:\\Temp\\WAS3679.tmp");
2。正确步骤应该是用一个CMemDC变量载入BITMAP,然后画到pDC上面
...
CDC dc;
dc.CreateCompatibleDC(pDC);
dc.SelectObject(&m_Bitmap);
....
pDC->BitBlt(0,0,BM.bmWidth, BM.bmHeight,&dc,0,0,SRCCOPY);
3.LoadBitmap只是Load资源,不是Load BMP文件。
4.可以使用
::LoadImage(AfxGetInstanceHandle(),
m_ImageName,IMAGE_BITMAP,0,0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE)
或用CreateBitmap()来做
5。debug assertation failed
是由ASSERT产生的,一般用来监测非法的参数,用VC debug是应该能看得到
参数为什么非法
1。路径错了,应该是("C:\\Temp\\WAS3679.tmp");
2。正确步骤应该是用一个CMemDC变量载入BITMAP,然后画到pDC上面
...
CDC dc;
dc.CreateCompatibleDC(pDC);
dc.SelectObject(&m_Bitmap);
....
pDC->BitBlt(0,0,BM.bmWidth, BM.bmHeight,&dc,0,0,SRCCOPY);
3.LoadBitmap只是Load资源,不是Load BMP文件。
4.可以使用
::LoadImage(AfxGetInstanceHandle(),
m_ImageName,IMAGE_BITMAP,0,0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE)
或用CreateBitmap()来做
5。debug assertation failed
是由ASSERT产生的,一般用来监测非法的参数,用VC debug是应该能看得到
参数为什么非法
{
CShowbitmapDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); CBitmap m_Bitmap;
m_Bitmap.LoadBitmap("C:\Temp\WAS3679.tmp");
~~~~~~~~~~~~~~~~~~~~~~~[改为"C:\\Temp\WAS3679.tmp"怎么会是tmp?]
pDC->CreateCompatibleDC(NULL);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[此处用法不论不类]
pDC->SelectObject(&m_Bitmap);
CClientDC ClientDC(this);
BITMAP BM;
m_Bitmap.GetObject(sizeof(BM), &BM);
ClientDC.BitBlt(0,0,BM.bmWidth, BM.bmHeight,pDC,0,0,SRCCOPY);
}// 以下给你一段可用的代码,已经给你调试通过了==========
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap BmpImg; HBITMAP hBmp=(HBITMAP)::LoadImage(NULL,"C:\\Temp\\WAS3579.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
BmpImg.Attach(hBmp);
CBitmap *pOldBmp=dcMem.SelectObject(&BmpImg);
BITMAP bmp;
BmpImg.GetBitmap(&bmp);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY); */
// or pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);
题外话,请你尊重他人,看看书吧,不是告戒,算我求你