在Static中 用Bitmap 画图JPG,BMP,GIF
CRect IRect;
CStatic *m_static;
m_static=(CStatic*)GetDlgItem(IDC_StcShowPic);
m_static->GetClientRect(&IRect);
HBITMAP bitmap;
if(!wcscmp(temp.GetBuffer(),_T("jpg"))||!wcscmp(temp.GetBuffer(),_T("gif"))||!wcscmp(temp.GetBuffer(),_T("bmp")))
{
bitmap=LoadALLPIC(strPath.GetBuffer(),IRect.Width(),IRect.Height()); //等待修改
m_static->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);
m_static->SetBitmap(bitmap);
}
HBITMAP LoadALLPIC(TCHAR * strFileName,int width,int heigh)//加载jpg
{
IPicture* p=NULL;
IStream* s=NULL;
HGLOBAL hG;
void* pp;
FILE* fp;
// Read file in memory
_wfopen_s(&fp,strFileName,_T("rb"));//Uunicode编码
//fp=fopen(strFileName,_T("rb"));//多字节编码
if (!fp)
return NULL;
fseek(fp,0,SEEK_END);
int fs = ftell(fp);
fseek(fp,0,SEEK_SET);
hG = GlobalAlloc(GPTR,fs);
if (!hG)
{
fclose(fp);
return NULL;
}
pp = (void*)hG;
fread(pp,1,fs,fp);
fclose(fp);
CreateStreamOnHGlobal(hG,false,&s);
if (!s)
{
GlobalFree(hG);
return NULL;
}
OleLoadPicture(s,0,false,IID_IPicture,(void**)&p);
if (!p)
{
s->Release();
GlobalFree(hG);
return NULL;
}
s->Release();
GlobalFree(hG);
HBITMAP hB = 0;
p->get_Handle((unsigned int*)&hB);
// Copy the image.Necessary, because upon p's release,
// the handle is destroyed.
HBITMAP hBB = (HBITMAP)CopyImage(hB,IMAGE_BITMAP,width,heigh,LR_COPYRETURNORG );
p->Release();
return hBB;
}

浙公网安备 33010602011771号