19,472
社区成员




BOOL CInsertIconDlg::LoadAnImage(TCHAR* FileName)
{
// Use IPicture stuff to use JPG / GIF files
CFile file;
if( !file.Open( FileName, CFile::modeRead) )
return FALSE;
DWORD m_nFileLen;
m_nFileLen = file.GetLength();
hMem = ::GlobalAlloc( GMEM_MOVEABLE, m_nFileLen );
LPVOID lpBuf = ::GlobalLock( hMem );
if( file.Read( lpBuf, m_nFileLen ) != m_nFileLen )
return FALSE;
file.Close();
::GlobalUnlock( hMem );
if ( CreateStreamOnHGlobal( hMem, TRUE, &pStream ) !=S_OK )
return FALSE;
if ( OleLoadPicture( pStream, m_nFileLen, TRUE, IID_IPicture, ( LPVOID * )&pPicture ) !=S_OK )
return FALSE;
return TRUE;
}
void CInsertIconDlg::OnPaint()
{
CPaintDC dc(this);
int x=0,y=0;
if (pPicture != NULL)
{
long nWidth,nHeight;
pPicture->get_Width( &nWidth );
pPicture->get_Height( &nHeight );
CRect rect;
GetClientRect(&rect);
pPicture->Render(dc,x,y,rect.Width(),rect.Height(),0,nHeight,nWidth,-nHeight,NULL);
}
CDialog::OnPaint();
}
//三个参数分别为PNG的资源值,资源类型,GDI+的Image类指针引用
BOOL ImageFromIDResource(UINT resourceID, LPCTSTR resourceType,Image*& image)
{
HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource(hInst,MAKEINTRESOURCE(resourceID),resourceType);
if (hRsrc == NULL)
return FALSE;
// load resource into memory
DWORD len = SizeofResource(hInst, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
if (lpRsrc == NULL)
return FALSE;
// Allocate global memory on which to create stream
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
memcpy(pmem,lpRsrc,len);
IStream* pstm;
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
// load from stream
image = Gdiplus::Image::FromStream(pstm);
// free/release stuff
//GlobalUnlock(m_hMem);
GlobalFree(m_hMem);
pstm->Release();
FreeResource(lpRsrc);
return TRUE;
}