可以给我一个显示jpg/gif的源文件吗?要简单地显示jpg./gif图片就行,谢了~

解决方案 »

  1.   

    void CJPGGifView::OnDraw(CDC* pDC)
    {
    CJPGGifDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    //0 声明一个picture和一个stream对象指针
    IPicture *pPic; 
    IStream *pStm;  CFileStatus fstatus; 
    CFile file; 
    LONG cb; 

    //1 打开文件并获得文件的真实大小
    if (file.Open("f:\\我的相册\\02.jpg",CFile::modeRead)
    && file.GetStatus("f:\\我的相册\\02.jpg", fstatus) 
    && ((cb = fstatus.m_size) != -1))

    //2 从堆中分配指定数量字节的一整块,这时系统无法提供零零碎碎的局部或全局的堆
    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb); 
    LPVOID pvData = NULL; 
    if (hGlobal != NULL) 

    //3 锁定全局内存对象并返回它的首地址
    if ((pvData = GlobalLock(hGlobal)) != NULL) 

    //4 把文件内容读进全局内存对象的地址空间中
    file.ReadHuge(pvData, cb); 
    //5 GlobalUnlock函数把以GMEM_MOVEABLE方式分配的内存对象的锁定计数器减1
    GlobalUnlock(hGlobal); 
    //6 从全局内存中创建stream对象,第二个参数指定当stream释放时是否自动释放全局内存
    CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); 
    //7 创建一个新的picture对象并用stream对象中的内容初始化
    if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic))) 

    OLE_XSIZE_HIMETRIC hmWidth; 
    OLE_YSIZE_HIMETRIC hmHeight; 
    //8 得到picture对象中图片的宽和高
    pPic->get_Width(&hmWidth); 
    pPic->get_Height(&hmHeight);  double fX,fY; 
    //9 GetDeviceCaps(HORZRES)得到屏幕的宽度(单位:像素)
    //GetDeviceCaps(HORZSIZE)得到屏幕的宽度(单位:毫米)
    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);
    //10 释放不要的stream对象并清空stream指针
    pStm->Release();
    pStm=NULL;
    //11 把图像显示在dc中
    if(FAILED(pPic->Render(*pDC,100,50,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL))) 
    AfxMessageBox("Failed To Render The picture!");
    pDC->SetBkMode(TRANSPARENT);
    pDC->TextOut(100,50,"这是一个JPG图像");
    //12 释放不要的picture对象,并把指针清空
    pPic->Release();
    pPic=NULL;
    //13 释放不要的全局内存对象,这个千万别忘了(32位程序不需要这行,系统会自动释放;16位程序一定要)
    FreeResource(hGlobal);

    else
    {
    AfxMessageBox("Error Loading Picture From Stream!"); 
    }



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