1. 程式人生 > >VC++6.0 通過HTTP方式獲取網頁 OpenURL

VC++6.0 通過HTTP方式獲取網頁 OpenURL

// 顯示圖片, lpstrImgUrl 為圖片URL地址,hWnd 為視窗控制代碼   HRESULT Utils::ShowPic(char*lpstrImgUrl,HWND hWnd)   
{   
  HDC hDC_Temp
=GetDC(hWnd);   
   
  IPicture 
*pPic;   
  IStream 
*pStm;   
   
  BOOL bResult;   
   
  DWORD dwFileSize,dwByteRead;   
   
  
//讀取網頁上圖片檔案,實際是個CHttpFile指標   CInternetSession session("HttpClient
"); 
  CFile
* httpFile = (CFile*)session.OpenURL(lpstrImgUrl); 
   
  
if (httpFile!=INVALID_HANDLE_VALUE)   
  {   
    dwFileSize
= httpFile->GetLength();//獲取檔案位元組數   if (dwFileSize==0xFFFFFFFF)   
      
return E_FAIL;   
  }   
  
else   
  {   
    
return E_FAIL;   
  }   
   
   
  
//分配全域性儲存空間     HGLOBAL hGlobal 
= GlobalAlloc(GMEM_MOVEABLE, dwFileSize);   
  LPVOID pvData 
= NULL;   
   
  
if (hGlobal == NULL)   
    
return E_FAIL;   
   
  
if ((pvData = GlobalLock(hGlobal)) == NULL)//鎖定分配記憶體塊   return E_FAIL;   
   
  
//把檔案讀入記憶體緩衝區     dwByteRead = httpFile->Read(pvData,dwFileSize); 
   
  GlobalUnlock(hGlobal);   
   
  CreateStreamOnHGlobal(hGlobal, TRUE, 
&pStm);   
   
  
//裝入圖形檔案     bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);   
   
  
if(FAILED(bResult))   
    
return E_FAIL;   
   
  OLE_XSIZE_HIMETRIC hmWidth; 
//圖片的真實寬度, 單位為英寸     OLE_YSIZE_HIMETRIC hmHeight; //圖片的真實高度, 單位為英寸     pPic->get_Width(&hmWidth);   
  pPic
->get_Height(&hmHeight);   
   
  
//轉換hmWidth和hmHeight為pixels距離,1英寸=25.4毫米   int nWidth = MulDiv(hmWidth,GetDeviceCaps(hDC_Temp,LOGPIXELSX),2540);   
  
int nHeight = MulDiv(hmHeight,GetDeviceCaps(hDC_Temp,LOGPIXELSY),2540);   
   
  
//將圖形輸出到螢幕上(有點像BitBlt)     bResult=pPic->Render(hDC_Temp,0,0,nWidth,nHeight,   
    
0,hmHeight,hmWidth,-hmHeight,NULL);   
   
  pPic
->Release();   
   
  httpFile
->Close();//關閉開啟的檔案   if (SUCCEEDED(bResult))   
  {   
    
return S_OK;   
  }   
  
else   
  {   
    
return E_FAIL;   
  }   
} 
// 顯示圖片, lpstrImgUrl 為圖片URL地址,hWnd 為視窗控制代碼 HRESULT Utils::ShowPic(char*lpstrImgUrl,HWND hWnd)  
{  
  HDC hDC_Temp
=GetDC(hWnd);  
  IPicture 
*pPic;  
  IStream 
*pStm;  
  BOOL bResult;  
  DWORD dwFileSize,dwByteRead;  
  
//讀取網頁上圖片檔案,實際是個CHttpFile指標CInternetSession session("HttpClient");
CFile
* httpFile = (CFile*)session.OpenURL(lpstrImgUrl);
  
if (httpFile!=INVALID_HANDLE_VALUE)  
  {  
    dwFileSize
= httpFile->GetLength();//獲取檔案位元組數  if (dwFileSize==0xFFFFFFFF)  
      
return E_FAIL;  
  }  
  
else  
  {  
    
return E_FAIL;  
  }  
  
//分配全域性儲存空間    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);  
  LPVOID pvData 
= NULL;  
  
if (hGlobal == NULL)  
    
return E_FAIL;  
  
if ((pvData = GlobalLock(hGlobal)) == NULL)//鎖定分配記憶體塊  return E_FAIL;  
  
//把檔案讀入記憶體緩衝區    dwByteRead = httpFile->Read(pvData,dwFileSize);
  GlobalUnlock(hGlobal);  
  CreateStreamOnHGlobal(hGlobal, TRUE, 
&pStm);  
  
//裝入圖形檔案    bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);  
  
if(FAILED(bResult))  
    
return E_FAIL;  
  OLE_XSIZE_HIMETRIC hmWidth; 
//圖片的真實寬度, 單位為英寸   OLE_YSIZE_HIMETRIC hmHeight; //圖片的真實高度, 單位為英寸   pPic->get_Width(&hmWidth);  
  pPic
->get_Height(&hmHeight);  
  
//轉換hmWidth和hmHeight為pixels距離,1英寸=25.4毫米 int nWidth = MulDiv(hmWidth,GetDeviceCaps(hDC_Temp,LOGPIXELSX),2540); 
  
int nHeight = MulDiv(hmHeight,GetDeviceCaps(hDC_Temp,LOGPIXELSY),2540); 
  
//將圖形輸出到螢幕上(有點像BitBlt)    bResult=pPic->Render(hDC_Temp,0,0,nWidth,nHeight,  
    
0,hmHeight,hmWidth,-hmHeight,NULL);  
  pPic
->Release();  
  httpFile
->Close();//關閉開啟的檔案  if (SUCCEEDED(bResult))  
  {  
    
return S_OK;  
  }  
  
else  
  {  
    
return E_FAIL;  
  }  
}