江湖告急.bitblt实现动画中的奇怪问题.(内存消耗严重.) 十万火急....高手眷顾啊.
我在利用BitBlt实现平滑动画过程中出现严重的内存消耗.不知道为什么.希望高手给予解答.
下面是我用于实现动画的类;
在视图中调用init方法初始化该类.
在时间响应函数中调用Draw方法绘图.时间间隔10毫秒.
class CCarton
{
public:
CCarton();
virtual ~CCarton();
void Init( CWnd* pWnd );
void Draw( CDC* pDC, INT iX, INT iY );
private:
CBitmap m_bmp;
CBitmap *m_pOldBmp;
CWnd* m_pDrawWnd;
CDC m_dcSrc;
BITMAP bm;
};
CCarton::CCarton()
{
m_pOldBmp = NULL;
}
CCarton::~CCarton()
{
m_dcSrc.SelectObject( m_pOldBmp );
m_dcSrc.DeleteDC();
}
void CCarton::Init( CWnd* pWnd )
{
m_pDrawWnd = pWnd;
m_bmp.LoadBitmap( IDB_BITMAP );
m_bmp.GetBitmap( & bm );
m_dcSrc.CreateCompatibleDC( pWnd-> GetDC() );
m_dcSrc.SetBkMode( TRANSPARENT );
m_pOldBmp = m_dcSrc.SelectObject( &m_bmp );
//m_dcSrc.DeleteDC();
}
void CCarton::Draw( CDC* pDC, INT iX = 0, INT iY = 0 )
{
pDC-> BitBlt( iX, iY ,bm.bmWidth, bm.bmHeight, &m_dcSrc, 0, 0, SRCCOPY );
}
[解决办法]
是VisualStudio吗?如果是,那在每个CPP文件的开头加上:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
然后按F5,就是调试,把程序运行一遍,结束之后,可以在《输出》窗口里看到生成的报告,可以发现内存泄漏,
detect memory leak!
然后就是泄漏的内在是在哪里被分配的。用这个办法可以查出内存泄漏的原因。