以前XP下编程,一直用的CDC资源释放方式都没有问题,最近在wince平台发现了一个关于CDC资源释放问题。
一般在XP下编程对于CDC资源的释放都是这样做的,GetDC对应用ReleaseDC,CreateDC对应用DeleteDC就OK了,但是在wince下就会出现问题,用CreateDC创建的设备文本,如果仅仅是使用DeleteDC是不够的,这样会导致内存被耗尽。正确的方法是先将你选入DC的资源选出,然后使用DeleteDC。例如:
void CMyDlg::OnPanit()
{
CPaintDC dc(this); // 用于绘制的设备上下文
CRect rc;
CDC memdc;
CBitmap bmp;
CBitmap *pOldBmp;
CBrush br;
CBrush *pOldBr;
GetClientRect(&rc);
br.CreateSolidBrush(RGB(255,0,0));
memdc.CreateCompatibleDC(&dc);
bmp.CreateCompatibleBitmap(&dc,rc.Width(),rc.Height());
pOldBmp= memdc.SelectObject(&bmp);
pOldBr= memdc.SelectObject(&br);
//画图
.................................
//选出选入设备文本的工具(必不可少,否则内存会耗尽)
memdc.SelectObject(pOldBmp);
memdc.SelectObject(pOldBr);
//删除DC对象
memdc.DeleteDC();
}