画笔资源未被正确释放
编号:QA001922
建立日期: 1999年10月28日 最后修改日期:1999年10月28日
所属类别:
Lieyi:
我在编制类似图元编辑软件(采用VC6.0++)。当书写到一个棒状图的图元编辑时,发现频
繁调用创建画笔函数和释放画笔资源,会造成系统资源很快的丧失殆尽,不知是操作系统
的缘故还是什么原因?
其中代码如下:
CBrush cf[10];
CPen pen[10];
...
pen[j].CreatePen (PS_SOLID, 1, sBar[i].bar[n].color);
dc->SelectObject (pen[j]);
cf[j].CreateSolidBrush (BackGround);
dc->SelectObject (cf[j]);
dc->Rectangle (&Rect);
DeleteObject(cf[j]);
DeleteObject(pen[j]);
回答:
kxb-vc的方案:
在使用GDI对象(如pen,brush,font,bitmap等)时,要把它们选入设备描述表中;
用完后必须把它们从设备描述表中选出才可删除,否则删除是无效的。
你的代码中删除的pen和brush还没有被从设备描述表中选出,因而它们占用的资源也无法释放。
下面的例子演示如何删除GDI对象:
CPen pen(PS_SOLID, 1, RGB(0, 128, 128));
CPen* pPrevPen = pDC->SelectObject(&pen);
CBrush brush(RGB(0, 128, 128));
CBrush* pPrevBrush = pDC->SelectObject(&brush);
...
pDC->SelectObject(pPrevPen);
pDC->SelectObject(pPrevBrush);
pen.DeleteObject();
brush.DeleteObject();
Lieyi的方案:
我经过实验发现:如果数组cf[n],如果每个cf都创建刷子,在结束删除刷子,系统基本正常.但是如果其中若干刷子未创建刷子,则系统会出现该现象.数组如果改成单一变量cf,也同样会出现该现象。以上供参考!
此问题由kxb-vc等回答。
| |
|
|
| |
|
|