1.你的代码有严重内存泄漏,没有释放占有内存和GDI对象。2.使用双缓存解决重绘的闪烁问题.可以参考下面代码在OnDraw中:CDC dcBack;
CBitmap bpBack;
dcBack.CreateCompatibleDC(&dc);//创建内存DC ,dc为显示DC
bpBack.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
CBitmap*poldbmp=dcBack.SelectObject(&bpBack);
//在dcBack中绘制//可以尝试在对内存DC绘图之前将显示DC图像做为背景复制到内存DC中.
dcBack.BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);//绘图操作
...//将dcBack中的图像绘到显示DC.
dc.BitBlt(0,0,rect.Width(),rect.Height(),&dcBack,0,0,SRCCOPY);
dcBack.SelectObject(poldbmp);
CBitmap bpBack;
dcBack.CreateCompatibleDC(&dc);//创建内存DC ,dc为显示DC
bpBack.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
CBitmap*poldbmp=dcBack.SelectObject(&bpBack);
//在dcBack中绘制//可以尝试在对内存DC绘图之前将显示DC图像做为背景复制到内存DC中.
dcBack.BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);//绘图操作
...//将dcBack中的图像绘到显示DC.
dc.BitBlt(0,0,rect.Width(),rect.Height(),&dcBack,0,0,SRCCOPY);
dcBack.SelectObject(poldbmp);
CRect rect;
GetClientRect(&rect);
pDC->FillSolidRect(rect,RGB(255,255,255));
请问如何释放内存和GDI对象?
包括pDC初始化部分。
CBitmap bmp;
CDC dc;
// init bmp;
// init dc
CBitmap * pOld = dc.SelectObject(&bmp);
...dc.SelectObject(pOld);如果没有最后这一句,pOld所指向的资源没有释放。而bmp所含的资源被dc或bmp本身释放,要看哪个析构函数先调用。
如果有最后这一句,pOld被dc释放,而bmp析构函数自己会释放资源。