说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

关于使用IPicture显示jpg图片不能刷新的问题

编辑:说三道四文库 发布时间:2018-05-25 11:46
HTML文档下载 WORD文档下载 PDF文档下载
我使用的是那种经典的方法,可以顺利的显示出图片,但是不能刷新窗口,
如最小化再恢复图片就不见了。请问各位这个问题如何解决?
代码附下:

    CDC* pDC = GetDC();
IStream *pStm;  
CFileStatus fstatus;  
CFile file;  
LONG cb;  
if(file.Open(strFileName,CFile::modeRead) && file.GetStatus(m_sPath,fstatus) && ((cb = fstatus.m_size) != -1))  
{  
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb); 
LPVOID pvData = NULL;  
if (hGlobal != NULL)  
{  
if ((pvData = GlobalLock(hGlobal)) != NULL) 
{  
file.ReadHuge(pvData, cb); 
GlobalUnlock(hGlobal);  
CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); 

}
file.Close();
}

IPicture *pPic;
if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic))) 

OLE_XSIZE_HIMETRIC hmWidth;  
OLE_YSIZE_HIMETRIC hmHeight;  
pPic->get_Width(&hmWidth);  
pPic->get_Height(&hmHeight);  
double fX,fY;  

double x = (double)pDC->GetDeviceCaps(HORZRES);
fX =(double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0); 
fY =(double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0); 
if(FAILED(pPic->Render(pDC->GetSafeHdc(),0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL))) 
AfxMessageBox("渲染图像失败!");  
pPic->Release();  
}  
else  
AfxMessageBox("从流中装载图像失败!");  
pStm->Release();
你的函数得放到OnPaint里面吧

不会吧。放到OnPaint里面每次刷新都需要重新loadfile,不是太浪费系统资源了。
…… ……
恩恩,我也是用的这个啊,没有这个问题啊
if(FAILED(pPic->Render(pDC->GetSafeHdc(),0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL))) 
AfxMessageBox("渲染图像失败!");  
pPic->Release(); /////这一句不要,设置为成员变量,在需要释放时再释放
至少我的是没有这时释放的,是在下一次响应和退出时释放的
我这样试了,还是不行啊。
...who help me?
...who help me?
帮你 up
我也是这个问题
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘