void CSssView::OnPaint()
{
CPaintDC dc(this); // device context for painting CBitmap *bmp;
mdc->SelectObject(bmp);
dc.BitBlt(0,0,400,266,mdc,0,0,SRCCOPY);}void CSssView::OnShift() //显示下一张图片;
{
iCount++;
delete bmp;//释放bmp内存;
bmp= new CBitmap;
ReleaseDC(mdc);//释放mdc内存;switch(iCount)
{
case 1:
bmp->LoadBitmap(IDB_BITMAP2);
break;
case 2:
bmp->LoadBitmap(IDB_BITMAP3);
break;
case 3:
bmp->LoadBitmap(IDB_BITMAP4);
break;
default:
break;
}
InvalidateRect(NULL,NULL);
}int CSssView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CClientDC dc(this);
// TODO: Add your specialized creation code here
iCount=0;
CDC *mdc;
bmp=new CBitmap;
mdc=new CDC;
mdc ->CreateCompatibleDC(&dc);
bmp->LoadBitmap(IDB_BITMAP1);
return 0;
}上面的这段代码执行时,每次显示下一张图片(执行OnShift()函数)时,从Windows任务管理器中看进程的内存使用量都在按图片的大小增加;
我用了 delete bmp;//释放bmp内存;
和ReleaseDC(mdc);//释放mdc内存;
为什么以前的内存没有释放掉???
如何才能释放掉上一张图片所占用的内存???
{
CPaintDC dc(this); // device context for painting CBitmap *bmp;
mdc->SelectObject(bmp);
dc.BitBlt(0,0,400,266,mdc,0,0,SRCCOPY);}void CSssView::OnShift() //显示下一张图片;
{
iCount++;
delete bmp;//释放bmp内存;
bmp= new CBitmap;
ReleaseDC(mdc);//释放mdc内存;switch(iCount)
{
case 1:
bmp->LoadBitmap(IDB_BITMAP2);
break;
case 2:
bmp->LoadBitmap(IDB_BITMAP3);
break;
case 3:
bmp->LoadBitmap(IDB_BITMAP4);
break;
default:
break;
}
InvalidateRect(NULL,NULL);
}int CSssView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CClientDC dc(this);
// TODO: Add your specialized creation code here
iCount=0;
CDC *mdc;
bmp=new CBitmap;
mdc=new CDC;
mdc ->CreateCompatibleDC(&dc);
bmp->LoadBitmap(IDB_BITMAP1);
return 0;
}上面的这段代码执行时,每次显示下一张图片(执行OnShift()函数)时,从Windows任务管理器中看进程的内存使用量都在按图片的大小增加;
我用了 delete bmp;//释放bmp内存;
和ReleaseDC(mdc);//释放mdc内存;
为什么以前的内存没有释放掉???
如何才能释放掉上一张图片所占用的内存???
从Windows任务管理器中看进程的内存使用量都在按图片的大小增加;
每次将图片选入dc的时候,保存原来的dc中的图片,然后在删除图片之前,将保存的原来的图片选入dc,再删除图片
请试一下
void CSssView::OnPaint()
{
CPaintDC dc(this); // device context for painting
mdc- >SelectObject(bmp);
dc.BitBlt(0,0,400,266,mdc,0,0,SRCCOPY); } void CSssView::OnShift() //显示下一张图片;
{
iCount++;
delete bmp;//释放bmp内存;
bmp= new CBitmap;
ReleaseDC(mdc);//释放mdc内存; switch(iCount)
{
case 1:
bmp- >LoadBitmap(IDB_BITMAP2);
break;
case 2:
bmp- >LoadBitmap(IDB_BITMAP3);
break;
case 3:
bmp- >LoadBitmap(IDB_BITMAP4);
break;
default:
break;
}
InvalidateRect(NULL,NULL);
} int CSssView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CClientDC dc(this);
// TODO: Add your specialized creation code here
iCount=0;
bmp=new CBitmap;
mdc=new CDC;
mdc - >CreateCompatibleDC(&dc);
bmp- >LoadBitmap(IDB_BITMAP1);
return 0;
}