我在菜单上添加了一个“打开”的菜单项,想实现通过点击打开按钮读入显示图片的功能。为此,我在onOpen()和onPaint()分别添加了如下代码;编译后没有出现错误,但在运行时却出现了一个对话框:
Debug Assertion Failed!
Program:E:\\.....\\Debug\\SDIdc.exe(SDIdc为工程名)
Flie :afxwin1.in1
line:418
请问各位高手这是什么原因啊,如何解决?
代码如下:
protected:
CBitmap m_bmp;
CDC m_dc;
CBitmap *m_oldbmp; void CSDIdcView::OnOpen()
{
// TODO: Add your command handler code here
CFileDialog dlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST,_T("*.bmp|*.bmp|"),this);
if(dlg.DoModal()==IDOK)
{
HBITMAP hbmp=(HBITMAP)LoadImage(NULL,dlg.GetPathName (),IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
if(hbmp==NULL)
{
AfxMessageBox(_T("加载位图失败"));
return;
}
//::FreeObject();
if(m_bmp.GetSafeHandle()==NULL)
{
m_bmp.Attach(hbmp);
}
else
{
m_bmp.Detach();
m_bmp.Attach(hbmp);
}
CDC* pdc=GetDC();
m_dc.CreateCompatibleDC(pdc);
ReleaseDC(pdc);
m_oldbmp=m_dc.SelectObject(&m_bmp);
Invalidate(FALSE);
}
}
void CSDIdcView::OnPaint()
{
CPaintDC dc(this);
BITMAP bm;
CRect rect;
m_bmp.GetBitmap(&bm);
GetClientRect(&rect);
::FillRect(dc.GetSafeHdc(),rect,(HBRUSH)GetStockObject(WHITE_BRUSH));
dc.StretchBlt(0,0,bm.bmWidth,bm.bmHeight,&m_dc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
//m_dc.SelectObject(m_oldbmp);
}
Debug Assertion Failed!
Program:E:\\.....\\Debug\\SDIdc.exe(SDIdc为工程名)
Flie :afxwin1.in1
line:418
请问各位高手这是什么原因啊,如何解决?
代码如下:
protected:
CBitmap m_bmp;
CDC m_dc;
CBitmap *m_oldbmp; void CSDIdcView::OnOpen()
{
// TODO: Add your command handler code here
CFileDialog dlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST,_T("*.bmp|*.bmp|"),this);
if(dlg.DoModal()==IDOK)
{
HBITMAP hbmp=(HBITMAP)LoadImage(NULL,dlg.GetPathName (),IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
if(hbmp==NULL)
{
AfxMessageBox(_T("加载位图失败"));
return;
}
//::FreeObject();
if(m_bmp.GetSafeHandle()==NULL)
{
m_bmp.Attach(hbmp);
}
else
{
m_bmp.Detach();
m_bmp.Attach(hbmp);
}
CDC* pdc=GetDC();
m_dc.CreateCompatibleDC(pdc);
ReleaseDC(pdc);
m_oldbmp=m_dc.SelectObject(&m_bmp);
Invalidate(FALSE);
}
}
void CSDIdcView::OnPaint()
{
CPaintDC dc(this);
BITMAP bm;
CRect rect;
m_bmp.GetBitmap(&bm);
GetClientRect(&rect);
::FillRect(dc.GetSafeHdc(),rect,(HBRUSH)GetStockObject(WHITE_BRUSH));
dc.StretchBlt(0,0,bm.bmWidth,bm.bmHeight,&m_dc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
//m_dc.SelectObject(m_oldbmp);
}
{
CPaintDC dc(this);
BITMAP bm;
CRect rect;
m_bmp.GetBitmap(&bm); //我猜程序崩溃在这,因为此时你的BMP还未加载呢.....