19,468
社区成员
发帖
与我相关
我的任务
分享
HDC hDC_Temp = dc->GetSafeHdc();
IPicture *pPic;
IStream *pStm;
HRESULT bResult;// = FALSE;
DWORD dwFileSize, dwByteRead;
//读取网页上图片文件,实际是个CHttpFile指针
CInternetSession session(L"HttpClient");
CFile* httpFile = (CFile*)session.OpenURL(url);
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);
//缩放图片
int nWZoom = nWidth / rect.Width();
int nHZoom = nHeight / rect.Height();
int nZoom = 1;
nZoom = (nWZoom > nHZoom) ? nWZoom : nHZoom;
nWidth /= nZoom;
nHeight /= nZoom;
int midW = (rect.left + rect.right) / 2;
int midH = (rect.top + rect.bottom) / 2;
rect.left = midW - nWidth / 2;
rect.right = midW + nWidth / 2;
rect.top = midH - nHeight / 2;
rect.bottom = midH + nHeight / 2;
//将图形输出到屏幕上(有点像BitBlt)
bResult = pPic->Render(hDC_Temp, rect.left, rect.top, rect.Width(), rect.Height(),0, hmHeight, hmWidth, -hmHeight, NULL);
pPic->Release();
httpFile->Close();//关闭打开的文件
if (SUCCEEDED(bResult)){
return S_OK;
}else{
return E_FAIL;
}