在用MFC开发过程中,首先定义一个打开对话框,可以加载一幅BITMAP位图。
打开对话框函数:CFileDialog dlg(TRUE,_T("BMP"),_T("*.BMP"),OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT,_T("BMP Files (*.bmp) |*.bmp"),NULL);然后载入位图在控件上显示出来。
载入函数:HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), fileName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
编译执行都通过了。运行的也没问题。我想问各位大师的是:当我再次加载一幅图像的时候出现错误对话框。然后点击忽略才会加载另一幅图像。怎么才能消除这个呢?急用。谢谢!
打开对话框函数:CFileDialog dlg(TRUE,_T("BMP"),_T("*.BMP"),OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT,_T("BMP Files (*.bmp) |*.bmp"),NULL);然后载入位图在控件上显示出来。
载入函数:HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), fileName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
编译执行都通过了。运行的也没问题。我想问各位大师的是:当我再次加载一幅图像的时候出现错误对话框。然后点击忽略才会加载另一幅图像。怎么才能消除这个呢?急用。谢谢!
解决方案 »
- 关于CStringArray
- 初学C++者,选用VC++2005?还是BCB6.0?
- 求助:如何在ceditview里显示行号?
- 关于vector的问题
- 界面更新导致socket连接中断,各位大虾给俺点建议
- 谁有边缘检测程序,用小波实现的,其他的不要。如果觉得分数不够,可以重开贴。
- VC中怎么用正则表达式,谢谢
- 新手提问:请问CDialog的DoDataExchange()的用法
- 连接错误:getip1.obj : error LNK2001: unresolved external symbol _RasEnumConnectionsA@12,谁能帮我解释一下!(在线)
- 将bmp和wav合成为一个avi
- Windows内核函数的命名
- win32 Application 句柄、指针转换
点击重试可以定位到错误点
看看是什么原因
或者用完之后及时delete掉
m_bmp.DeleteObject;
每次都判断一下。
{
// TODO: Add your control notification handler code here
//´´½¨±ê־λ
m_flag2 = TRUE; if( m_bmp.m_hObject != NULL )//ÅжÏ
m_bmp.DeleteObject();
///////////////////////////ÔØÈëͼÏñ//////////////////////// HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
fileName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
if( hbmp == NULL ) return FALSE;
m_bmp.Attach( hbmp );
DIBSECTION ds;
BITMAPINFOHEADER &bminfo = ds.dsBmih;
m_bmp.GetObject( sizeof(ds), &ds );
int cx=bminfo.biWidth; //µÃµ½Í¼Ïñ¿í¶È
int cy=bminfo.biHeight; //µÃµ½Í¼Ïñ¸ß¶È
//Èç¹ûÌ«´ó£¬½«Í¼Æ¬°´Ò»¶¨±ÈÀýËõС
//StretchBlt(
/////////////////// ////////////////////////////////
///µÃµ½ÁËͼÏñµÄ¿í¶ÈºÍ¸ß¶Èºó,ÎÒÃǾͿÉÒÔ¶ÔͼÏñ´óС½øÐÐÊÊÓ¦,¼´µ÷Õû¿Ø¼þµÄ´óС,ÈÃËüÕýºÃÏÔʾһÕÅͼƬ///
CRect rect;
GetDlgItem(IDC_STATIC_BMP2)->GetWindowRect(&rect);
ScreenToClient(&rect);
GetDlgItem(IDC_STATIC_BMP2)->MoveWindow(rect.left,rect.top,cx,cy,true);//µ÷Õû´óС //Ìí¼ÓµÄ´úÂë,ÔڿؼþÉÏÏÔʾͼÏñ CPaintDC dc(GetDlgItem(IDC_STATIC_BMP2));
CRect rcclient;
GetDlgItem(IDC_STATIC_BMP2)->GetClientRect(&rcclient);
CDC memdc;
memdc.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height());
memdc.SelectObject( &bitmap );
CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0);
CDC maskdc;
maskdc.CreateCompatibleDC(&dc);
CBitmap maskbitmap;
maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL);
maskdc.SelectObject( &maskbitmap );
maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc,
rcclient.left, rcclient.top, SRCCOPY);
CBrush brush;
//Initializes a brush with a pattern specified by a bitmap brush.CreatePatternBrush(&m_bmp);
dc.FillRect(rcclient, &brush);
dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),
&memdc, rcclient.left, rcclient.top,SRCPAINT);
brush.DeleteObject();
return TRUE;
}void CBITMAPDlg::OnBtnRead()
{
// TODO: Add your control notification handler code here
}BOOL CBITMAPDlg::OnSelect()
{
// TODO: Add your control notification handler code here
//fileName.Empty(); //´´½¨Ñ¡Ôñ·¾¶°´Å¥ CFileDialog dlg(TRUE,_T("BMP"),_T("*.BMP"),OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT,_T("BMP Files (*.bmp) |*.bmp"),NULL);
if(dlg.DoModal()==IDCANCEL)
{
return FALSE;
}
//´´½¨Ò»¸ö±ê־λ m_flag1 = TRUE;
//½«Â·¾¶Ãû±£´æ²¢ÏÔʾ³öÀ´
fileName=dlg.GetPathName();
GetDlgItem(IDC_BITMAP_ADDR)->SetWindowText(fileName);
//µØÖ·±ä»»'\'---->'/'///////////
//½«Cstringת»»Îªchar*
char *p; p=fileName.GetBuffer(fileName.GetLength()); for(int i=0;i<=fileName.GetLength();i++)
{
if(*p=='\\')
{
*p='/';
}
p++;
} //½«char*ת»»ÎªCstring *p='\0';
p = fileName.GetBuffer(fileName.GetLength()); CString fileName(p);
if( m_bmp.m_hObject != NULL )//ÅжÏ
m_bmp.DeleteObject();//ÊÍ·Åλͼ×ÊÔ´ ///////////////////////////ÔØÈëͼÏñ//////////////////////// HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
fileName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
if( hbmp == NULL ) return FALSE;
m_bmp.Attach( hbmp );
DIBSECTION ds;
BITMAPINFOHEADER &bminfo = ds.dsBmih;
m_bmp.GetObject( sizeof(ds), &ds );
int cx=bminfo.biWidth; //µÃµ½Í¼Ïñ¿í¶È
int cy=bminfo.biHeight; //µÃµ½Í¼Ïñ¸ß¶È
/////////////////// ////////////////////////////////
///µÃµ½ÁËͼÏñµÄ¿í¶ÈºÍ¸ß¶Èºó,ÎÒÃǾͿÉÒÔ¶ÔͼÏñ´óС½øÐÐÊÊÓ¦,¼´µ÷Õû¿Ø¼þµÄ´óС,ÈÃËüÕýºÃÏÔʾһÕÅͼƬ///
CRect rect;
GetDlgItem(IDC_STATIC_BMP1)->GetWindowRect(&rect);
ScreenToClient(&rect);
GetDlgItem(IDC_STATIC_BMP1)->MoveWindow(rect.left,rect.top,cx,cy,true);//µ÷Õû´óС
//MessageBox("select"); //Ìí¼ÓµÄ´úÂë,ÔڿؼþÉÏÏÔʾͼÏñ CPaintDC dc(GetDlgItem(IDC_STATIC_BMP1));
CRect rcclient;
GetDlgItem(IDC_STATIC_BMP1)->GetClientRect(&rcclient);
CDC memdc;
memdc.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height());
memdc.SelectObject( &bitmap );
CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0);
CDC maskdc;
maskdc.CreateCompatibleDC(&dc);
CBitmap maskbitmap;
maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL);
maskdc.SelectObject( &maskbitmap );
maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc,
rcclient.left, rcclient.top, SRCCOPY);
CBrush brush;
//Initializes a brush with a pattern specified by a bitmap brush.CreatePatternBrush(&m_bmp);
dc.FillRect(rcclient, &brush);
dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),
&memdc, rcclient.left, rcclient.top,SRCPAINT);
brush.DeleteObject();
//DeleteObject((HGDIOBJ)hbmp);
return TRUE;
}
CBitmap bitmap;如果已经load了,再次load得释放 DeleteObject,然后再load