将图片以流的方式显示到控件当中,代码如下:
void DrawPic(HDC hDC, LPCTSTR lpFileName)
{
//
// 将图片通过流方式显示在DC中
//
HANDLE hFile = CreateFile( //打开文件
lpFileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
DWORD dwFileSize = GetFileSize(hFile, NULL); //得到文件的大小
DWORD dwReadSize = 0; //读取的字节数
HGLOBAL hImageMemory = GlobalAlloc(GMEM_MOVEABLE, dwFileSize); //分配堆
void* pImageMemory = GlobalLock(hImageMemory); //锁定堆,并且得到堆指针
/*
* 如果直接传入的是二进制内容,则通过memcpy_s将内容拷贝到pImageMemory当中即可
* 比如memcpy_s(pImageMemory, dwBuffSize, pBuff, dwBuffSize);
*/
ReadFile( //读取文件
hFile,
pImageMemory,
dwFileSize,
&dwReadSize,
NULL);
GlobalUnlock(hImageMemory); //解除锁定
IStream* pIStream = NULL;
CreateStreamOnHGlobal(hImageMemory, FALSE, &pIStream); //得到IStream
Image img(pIStream); //将流加载到Image对象当中
Graphics g(hDC);
g.DrawImage(&img, 0, 0, 100, 100); //绘制图片
GlobalFree(hImageMemory); //释放堆空间
pIStream->Release(); //释放IStream
}
以上方法可以显示jpg、gif、png等格式的图片,如果不需要显示png的图片,可以参考API OleLoadPicture.
相关阅读