转在VC中如果实现GIF的播放?

来源:百度文库 编辑:神马文学网 时间:2024/04/29 07:29:29


  在VC中如果实现GIF的播放?
void   CImageView::OnDraw(CDC*   pDC)  
  {  
          CImageDoc*   pDoc   =   GetDocument();  
          ASSERT_VALID(pDoc);  
          //   TODO:   add   draw   code   for   native   data   here  
          IPicture   *pPic;    
          IStream   *pStm;    
           
          CFileStatus   fstatus;    
          CFile   file;    
          LONG   cb;    
           
          if   (file.Open("c:/a.jpg",CFile::modeRead)  
                  &&file.GetStatus("c:/a.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->GetDeviceCaps(HORZSIZE)*100.0);    
                                          fY   =   (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);    
                                          if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))    
                                                  AfxMessageBox("Failed   To   Render   The   picture!");    
                                          pPic->Release();    
                                  }    
                                  else    
                                          AfxMessageBox("Error   Loading   Picture   From   Stream!");    
                          }    
                  }    
          }    
          else    
                  AfxMessageBox("Can't   Open   Image   File!");    
   
  }