我使用的是那种经典的方法,可以顺利的显示出图片,但是不能刷新窗口,
如最小化再恢复图片就不见了。请问各位这个问题如何解决?
代码附下: 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();
如最小化再恢复图片就不见了。请问各位这个问题如何解决?
代码附下: 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();
AfxMessageBox("渲染图像失败!");
pPic->Release(); /////这一句不要,设置为成员变量,在需要释放时再释放
至少我的是没有这时释放的,是在下一次响应和退出时释放的