GDI的内存泄露问题
对于不停的获得和释放绘图设备句柄(DC)可能会导致GDI内存泄露。本文从一个实际项目中总结出以下几条经验防止内存泄露。
尽量使用HDC和DeleteDC组合,不要用CDC
HDC imageHDC =::CreateCompatibleDC( NULL );
HBITMAP hOldBMP = (HBITMAP)::SelectObject(imageHDC, m_hBmpResult[m_dResult]);
......
::DeleteDC(imageHDC);
GetDC和ReleaseDC配合使用
CDC* pDC=GetDC();
......
ReleaseDC(pDC);
对于常使用的图片资源,在程序初始化前就加载,并保存在内存里
m_hBmpInsideRoul = ::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_INSIDE_ROUL));
m_hBmpOutsideRoul = ::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_OUTSIDE_ROUL));
m_hBmpBall = ::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BALL));
for (int i=0; i<37; i++)
{
m_hBmpResult[i] = ::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_RESULT0+i));
}
声音文件的播放和释放
播放声音
PlaySound(MAKEINTRESOURCE(IDR_ROLLWAV),AfxGetResourceHandle(),SND_ASYNC|SND_RESOURCE );
......
//释放声音
PlaySound(NULL,NULL,0);