MFC位图显示问题 本帖最后由 u010075825 于 2013-08-10 14:24:34 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你state没设置0,他怎么读?void CGraphicView::OnFileOpen() {// TODO: Add your command handler code hereCFileDialog dlg(TRUE,"BMP","*.BMP",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"位图文件(*.BMP)|*.BMP|"); if (IDOK==dlg.DoModal()){ BmpName.Format("%s",dlg.GetPathName()); state = 0; ShowPicture(BmpName); }} 第二次准备加载图片是,检测到state==1,没有执行加载图像OnFileOpen内修改下试试:state = 0;ShowPicture(BmpName); if(state==0){HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE); if(m_bitmap != NULL) { m_bitmap.Detach(); delete m_bitmap; m_bitmap = NULL; m_bitmap = new CBitmap(); } m_bitmap.Attach(hBitmap); state=1;}没有测试,你这样改下试试 void CGraphicView::ShowPicture(CString BmpName){if(state==0){HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE); if(m_bitmap.m_hObject) DeleteObject(m_bitmap.Detach); m_bitmap.Attach(hBitmap); state=1;} Invalidate(); } 已经修改,8行应该是Detach后少加了括号DeleteObject(m_bitmap.Detach())。还麻烦能稍微讲一下为什么要这么加么? 如果m_bitmap中已经与hBitmap关联起来你再Attach就会出错。所以要先把原来的hBitmap分离出来,然后再Attach。当然,为了避免内存泄露,还要把分离出来的hBitmap释放掉 Release下生成DLL的问题 我的VC助手是什么问题 如何CString类型的目录转换成LPCTSTR类型 一个directx的小问题 哪位高手可以谈谈多线程和多进程编程? 一个好大的问题 菜鸟想问:我想把0.123456转变成12.3456%怎么办啊? 请问:VC++,C#,Delphi,VB,Java这几种语言之间该怎样选择? 属性页不能正常跳转 多个wave文件拼接播放 郁金香外挂问题 MFC程序执行时出现了错误,求帮忙
void CGraphicView::OnFileOpen()
{
// TODO: Add your command handler code here
CFileDialog dlg(TRUE,"BMP","*.BMP",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"位图文件(*.BMP)|*.BMP|");
if (IDOK==dlg.DoModal())
{
BmpName.Format("%s",dlg.GetPathName());
state = 0;
ShowPicture(BmpName);
}
}
ShowPicture(BmpName);
{
HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE); if(m_bitmap != NULL)
{
m_bitmap.Detach();
delete m_bitmap;
m_bitmap = NULL;
m_bitmap = new CBitmap();
}
m_bitmap.Attach(hBitmap);
state=1;
}没有测试,你这样改下试试
void CGraphicView::ShowPicture(CString BmpName)
{if(state==0)
{
HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
if(m_bitmap.m_hObject)
DeleteObject(m_bitmap.Detach);
m_bitmap.Attach(hBitmap);
state=1;
}
Invalidate();
}
还麻烦能稍微讲一下为什么要这么加么?