热情软件屋

 

画笔资源未被正确释放


编号: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等回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio