我在用MFC编写一个程序,以单文档为基础,功能是从文件读取.jpg格式的图片并将它显示在客户区.主要代码如下:我声明的变量有:
CString m_str; //存路径名
IStream* m_pstrm; //将图片读入内存时的流指针
IPicture* m_IpPic; 此函数作用是将图片读入内存(使用文件对话框取得路径):
void CTest_picture2View::OnShowfile()
{
CFileDialog dlg(TRUE,"jpg","*.jpg",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"JPEG文件(*.jpg)|*.jpg|GIF文件(*.gif)|*.gif||",NULL);if(dlg.DoModal()==IDOK)
{m_str=dlg.GetPathName();
}
CFile file;
CFileStatus fstatus;
LONG cb;
if(m_str.GetLength()<=0){return;}
if(file.Open(m_str,CFile::modeRead)==FALSE)
{
file.Close();
return;
}
if(file.GetStatus(m_str,fstatus)==FALSE)
{
file.Close();
return;
}
cb=fstatus.m_size;
HGLOBAL hglobal=GlobalAlloc(GMEM_MOVEABLE, cb); // GMEM_MOVEABLE表示活动的
LPVOID pvData =GlobalLock(hglobal); //锁定内存对象
if(hglobal!=NULL)
{
if(pvData!=NULL)
{
file.ReadHuge(pvData,cb);
GlobalUnlock(hglobal);CreateStreamOnHGlobal(hglobal,TRUE,&m_pstrm);
if(FAILED(OleLoadPicture(m_pstrm,cb,TRUE,IID_IPicture,(LPVOID*)&m_IpPic)))
{return;}
Invalidate();
}
}
// TODO: Add your command handler code here
}下面函数的作用是在客户区显示图片:
void CTest_picture2View::OnDraw(CDC* pDC)
{CTest_picture2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rc;
rc.SetRect(0,0,0,0);
GetClientRect(&rc);
long hmWidth,hmHeight;
m_IpPic->get_Width(&hmWidth);
m_IpPic->get_Height(&hmHeight);
m_IpPic->Render(*pDC, rc.left, rc.top, rc.Width(), rc.Height(),
0, hmHeight, hmWidth, -hmHeight, NULL);// TODO: add draw code for native data here
}此程序的主要问题是m_IpPic->get_Width(&hmWidth)函数和m_IpPic->getHeight(&hmHeight)函数的使用.编译、链接时没问题,就是在运行时系统报错。将上述两函数注掉后报错消失,但无法显示图片。望众高手指点错误所在,万分感谢。
CString m_str; //存路径名
IStream* m_pstrm; //将图片读入内存时的流指针
IPicture* m_IpPic; 此函数作用是将图片读入内存(使用文件对话框取得路径):
void CTest_picture2View::OnShowfile()
{
CFileDialog dlg(TRUE,"jpg","*.jpg",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"JPEG文件(*.jpg)|*.jpg|GIF文件(*.gif)|*.gif||",NULL);if(dlg.DoModal()==IDOK)
{m_str=dlg.GetPathName();
}
CFile file;
CFileStatus fstatus;
LONG cb;
if(m_str.GetLength()<=0){return;}
if(file.Open(m_str,CFile::modeRead)==FALSE)
{
file.Close();
return;
}
if(file.GetStatus(m_str,fstatus)==FALSE)
{
file.Close();
return;
}
cb=fstatus.m_size;
HGLOBAL hglobal=GlobalAlloc(GMEM_MOVEABLE, cb); // GMEM_MOVEABLE表示活动的
LPVOID pvData =GlobalLock(hglobal); //锁定内存对象
if(hglobal!=NULL)
{
if(pvData!=NULL)
{
file.ReadHuge(pvData,cb);
GlobalUnlock(hglobal);CreateStreamOnHGlobal(hglobal,TRUE,&m_pstrm);
if(FAILED(OleLoadPicture(m_pstrm,cb,TRUE,IID_IPicture,(LPVOID*)&m_IpPic)))
{return;}
Invalidate();
}
}
// TODO: Add your command handler code here
}下面函数的作用是在客户区显示图片:
void CTest_picture2View::OnDraw(CDC* pDC)
{CTest_picture2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rc;
rc.SetRect(0,0,0,0);
GetClientRect(&rc);
long hmWidth,hmHeight;
m_IpPic->get_Width(&hmWidth);
m_IpPic->get_Height(&hmHeight);
m_IpPic->Render(*pDC, rc.left, rc.top, rc.Width(), rc.Height(),
0, hmHeight, hmWidth, -hmHeight, NULL);// TODO: add draw code for native data here
}此程序的主要问题是m_IpPic->get_Width(&hmWidth)函数和m_IpPic->getHeight(&hmHeight)函数的使用.编译、链接时没问题,就是在运行时系统报错。将上述两函数注掉后报错消失,但无法显示图片。望众高手指点错误所在,万分感谢。
解决方案 »
- 数据采集的高手请进
- ARP防火墙,求资料
- 加载DLL的奇怪问题,请高手帮我看下!
- SDK程序滚动条程序中,若显示的内容为文本,则可以计算出要显示的始
- 我实在感到汗颜,向各位指教MFC的一个小问题。
- 关于钩子函数的问题
- 我该怎样来学习com 好就给分,诚信为本
- 一个函数的参数声明只有一个类型 求调用方法
- MFC中关于 读写文件的问题\大侠帮忙
- MFC 曲线缩放 数据点多
- 难道是MFC的BUG?如果在一个CDialog里面创建一个CTabCtrl,在CTableCtrl里面做一个Child类型的Dialg,这个时候有个问题,请大家帮忙...
- 在一个Child的CDialog里面设置了WM_CLIPCHILD属性.这个Dlg里有一个ListCtrl,怎么设置属性之后刷新就不正确了呢?其它控件没问题~~~~
if (m_lpPic) //初始化为NULL
{
CRect rc;
GetClientRect(&rc);
long hmWidth,hmHeight;
m_IpPic->get_Width(&hmWidth);
m_IpPic->get_Height(&hmHeight);
m_IpPic->Render(*pDC, rc.left, rc.top, rc.Width(), rc.Height(),
0, hmHeight, hmWidth, -hmHeight, NULL);
}