在VC中是不能直接显示非BMP的图象的。
你要把图象的象素读出来放到HGLOBAL里,用StretchDIBits函数显示。
至于读象素的工作我是用别人写的dll做的,如果对图象格式不是很熟一般写不出来,你可以去找一个叫imageload。dll的东西。它只能显示一般的gif,显示动态的gif可以去下载专门的控件,很好找的。

解决方案 »

  1.   

    转载:在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!");