我在菜单上添加了一个“打开”的菜单项,想实现通过点击打开按钮读入显示图片的功能。为此,我在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); 
}