说明:在这里写个函数反回一个位图句柄,用法类似于LoadImage函数,指定一个图片的路径就行了.
注意:用完后记得释放.
- HANDLE LoadAnImage(LPCTSTR FileName)
- {
- // Use IPicture stuff to use JPG / GIF files
- IPicture* p;
- IStream* s;
- HGLOBAL hG;
- void* pp;
- FILE* fp;
- if (FileName == NULL || _tcscmp(FileName, "") == 0)
- return NULL;
- // Read file in memory
- fp = fopen(FileName,"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 = GlobalLock( hG );
- fread(pp,1,fs,fp);
- fclose(fp);
- GlobalUnlock( hG );
- // Create an IStream so IPicture can
- 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);
- HANDLE hB = 0;
- p->get_Handle((UINT *)&hB);
- // Copy the image. Necessary, because upon p's release,
- // the handle is destroyed.
- HANDLE hBB = CopyImage(hB,IMAGE_BITMAP,0,0,LR_COPYRETURNORG);
- p->Release();
- // TRACE2("/nFILE: %s, HANDLE: 0x%x/n", FileName, hBB);
- return hBB;
- }