您的位置:首页 > 其它

wince 下CDC资源释放问题:DeleteDC

2013-04-11 13:36 169 查看
以前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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: