cool !!!! 在VC中显示JPEG和GIF图像

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

在VC中显示JPEG和GIF图像

我看了MSDN也以为只对BMP有用,结果是对JPG GIF都可以。

向不轻信MS的JDK致敬!

//admire JDK

以下是实验代码,大家可以在95下试试,我在98+IE5上成功。

是一个CView的例子,别忘了AfxOleInit

void CPICView::OnDraw(CDC* pDC)

{

CPICDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

IPicture *pPic;

IStream *pStm;

CFileStatus fstatus;

CFile file;

LONG cb;

if (file.Open("c:/test.jpg",CFile::modeRead)&&file.GetStatus("c:/test.jpg",

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);

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;

fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->Ge

tDeviceCaps(HORZSIZE)*100.0);

fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->G

etDeviceCaps(VERTSIZE)*100.0);

if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-h

mHeight,NULL)))

AfxMessageBox("Failed To Render The picture!");

pPic->Release();

}

else

AfxMessageBox("Error Loading Picture From Stream!");

}

}

}

else

AfxMessageBox("Can't Open Image File!");

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航