这个方法实际上是使用IXMLHTTPRequest接口完成图片下载,然后再将下载的数据转换为IStream接口,最后用接口IPicture装一段数据流来完成图片的加载。 HANDLE LoadImageFromURL(LPCTSTR pszURL) { HRESULT hr; IXMLHTTPRequestPtr pIXMLHTTPRequest = NULL; IStream *pIStream = NULL; IPicture* pIPicture=NULL; VARIANT vValue; HANDLE hTemp, hImage=NULL; try { hr = pIXMLHTTPRequest.CreateInstance("Msxml2.XMLHTTP.3.0"); if( FAILED(hr) ) _com_issue_error(hr); hr = pIXMLHTTPRequest->open(TEXT("GET"), pszURL, false); if( FAILED(hr) ) _com_issue_error(hr); hr=pIXMLHTTPRequest->send(); if( FAILED(hr) ) _com_issue_error(hr); hr = pIXMLHTTPRequest->get_responseStream(&vValue); if( FAILED(hr) ) _com_issue_error(hr); pIStream = (IStream*)vValue.punkVal; hr = OleLoadPicture(pIStream, 0, FALSE, IID_IPicture, (void**)&pIPicture); if( FAILED(hr) ) _com_issue_error(hr); hr = pIPicture->get_Handle((OLE_HANDLE*)&hTemp); if( FAILED(hr) ) _com_issue_error(hr); hImage = CopyImage(hTemp, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG); pIPicture->Release(); pIStream->Release(); } catch(...) { if(pIStream) pIStream->Release(); if(pIPicture) pIPicture->Release(); return NULL; } return hImage; }