读书人

江湖告急bitblt实现动画中的奇怪有关问

发布时间: 2012-03-07 09:13:51 作者: rapoo

江湖告急.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!
然后就是泄漏的内在是在哪里被分配的。用这个办法可以查出内存泄漏的原因。

读书人网 >VC/MFC

热点推荐