BOOL CShowJPEGDlg::OnEraseBkgnd(CDC* pDC)
{
IStream *pStream; //定义流对象
IPicture *pPicture; //定义接口对象
OLE_XSIZE_HIMETRIC JPGWidth; //图像宽度
OLE_YSIZE_HIMETRIC JPGHeight; //图像高度
// TODO: Add your message handler code here and/or call default
static BOOL bInit=FALSE;
// if ( !bInit )
// {
CFile file;
file.Open( "E:\\Backup\\我的文档\\ending.jpg", CFile::modeReadWrite );
DWORD len = file.GetLength();
HGLOBAL hMen; //堆句柄
hMen = GlobalAlloc( GMEM_MOVEABLE, len ); //分配可移动的内存
LPVOID pData = NULL;
pData = GlobalLock( hMen ); //锁定内存后返回指针
file.ReadHuge( pData, len ); //调用ReadHuge方法
file.Close(); GlobalUnlock( hMen ); //解锁 CreateStreamOnHGlobal( hMen, TRUE, &pStream );
OleLoadPicture( pStream, len, TRUE, IID_IPicture, (LPVOID*)&pPicture );
pPicture->get_Height( &JPGHeight );
pPicture->get_Width( &JPGWidth );
GlobalFree( hMen );
/* }*/
CRect rc;
GetWindowRect(rc);
pPicture->Render( pDC->m_hDC, 0, 0, rc.Width(), rc.Height(),
0, JPGHeight, JPGWidth, -JPGHeight, NULL );
// pPicture->Render( pDC->m_hDC, 0, 0, (int)(JPGWidth/26.45), (int)(JPGHeight/26.45),
// 0, JPGHeight, JPGWidth, -JPGHeight, NULL );
return TRUE;
// return CDialog::OnEraseBkgnd(pDC);
}参考网上的代码~ 但发现窗体重绘的时,使用的内存急速增多~ 到底哪里出现问题了?
....
pStream->Release();
pPicture->Release();
pPicture->Release()即可
不要再调用
pStream->Release()了,否则会报错,因为你CreateStreamOnHGlobal时使用了连带释放选项