16,551
社区成员
发帖
与我相关
我的任务
分享
#include<wininet.h>
#pragma comment(lib,"wininet.lib")
void SetImage(LPCTSTR imgUrl)
{
DWORD length(1024*10);
DWORD readLength(0);
BYTE* pBuffer(NULL);
BYTE* p(NULL);
HINTERNET hInternet;
hInternet=InternetOpen(_T("someName"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if (hInternet==NULL)
{
return;
}
HINTERNET hUrl;
hUrl=InternetOpenUrl(hInternet,imgUrl,NULL,0,INTERNET_FLAG_RELOAD,0);
if (hUrl==NULL)
{
InternetCloseHandle(hInternet);
return;
}
try
{
//下载图片
pBuffer=new BYTE[length];
memset(pBuffer,0,length);
p=pBuffer;
BOOL read;
while(true)
{
read=InternetReadFile(hUrl,p,1024,&readLength);
if(!read||readLength==0)
break;
if ((p-pBuffer+readLength)>=length)
{
DWORD len=2*length;
BYTE* tmp=new BYTE[len];
memset(tmp,0,len);
memcpy(tmp, pBuffer, length);
int offset=p-pBuffer;
delete[] pBuffer;
pBuffer=tmp;
p=pBuffer+offset;
length=len;
}
p+=readLength;
}
int btslen=p-pBuffer;
//生成图片
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, btslen);
LPVOID pvData = NULL;
if (hGlobal != NULL)
{
if ((pvData = GlobalLock(hGlobal)) != NULL)
{
errno_t err;
err = memcpy_s(pvData, btslen, pBuffer, btslen);
if (!err)
{
GlobalUnlock(hGlobal);
IPicture *pPic;
IStream *pStm;
CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
HRESULT hr;
hr=OleLoadPicture(pStm,btslen,TRUE,IID_IPicture,(LPVOID*)&pPic);
if(hr==S_OK)
{
this->m_pPic=pPic;//m_pPic缓存图片信息
}
}
}
}
if (pBuffer!=NULL)
{
delete[] pBuffer;
}
}
catch(...){}
InternetCloseHandle(hUrl);
InternetCloseHandle(hInternet);
}