BOOL LoadMemImage(void *pMemData, ULONG nLen, CImage& imgObj)
{
BOOL bRet = FALSE;
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, nLen);
void *pData = GlobalLock(hGlobal);
memcpy(pData, pMemData, nLen);
GlobalUnlock(hGlobal);
IStream *pStream = NULL;
if(CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) == S_OK) {
if (SUCCEEDED(imgObj.Load(pStream))) bRet = TRUE;
pStream->Release();
}
GlobalFree(hGlobal);
return bRet;
}
_variant_t body = HttpRe->GetResponseBody();
ULONG dataLen = body.parray->rgsabound[0].cElements;
char *pContentBuffer = (char *)body.parray->pvData;
CImage img;
BOOL bRet = LoadMemImage(pContentBuffer, dataLen, img);
CStatic *pStaticPic = (CStatic *)GetDlgItem(IDC_PIC);
if (bRet && pStaticPic)
{
HBITMAP retBitmap = pStaticPic->SetBitmap(img.Detach());
}
先获取响应信息。然后调用 LoadMemImage 将图片数据从char*转化为CImage. 然后控件调用 SetBitmap 来让图片显示在控件上面。