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();
}
一般在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();
}
相关文章推荐
- wince 下CDC资源释放问题:DeleteDC
- 资源释放的问题
- [转载]浅谈C#托管程序中的资源释放问题
- 浅谈C#托管程序中的资源释放问题
- 多个资源文件释放的问题
- 浅谈C#托管程序中的资源释放问题 来源:愚翁
- Android Camera 开发出现的资源释放问题
- 关于MappedByteBuffer资源释放问题
- Windows Media Player资源释放问题
- [转载]修复IE8进程延迟关闭的问题 充分释放资源
- qt中关闭窗口资源释放问题
- 浅谈C#托管程序中的资源释放问题
- [案例ANR]媒体播放器操作线程与资源释放问题
- jni未释放资源问题。Failed adding to JNI local ref table (has 512 entries)
- 浅谈C#托管程序中的资源释放问题
- 浅谈C#托管程序中的资源释放问题 好文章!!!
- 浅谈C#托管程序中的资源释放问题
- 多线程下关于硬件资源的释放问题
- Delphi中由TComponent.Owner引发的资源重复释放问题
- 浅谈C#托管程序中的资源释放问题