for(int i=0;i<1000;i++)
{
CBrush br1;
br1.CreateSolidBrush (tpcolor[i]);
mem.SelectStockObject(NULL_PEN);
mem.SelectObject(&br1);
mem.Rectangle(a+1,b+1,a+m_nZoom+1,b+m_nZoom+1);
br1.DeleteObject();
}这个好还是
CBrush br1;
for(int i=0;i<1000;i++)
{
br1.CreateSolidBrush (tpcolor[i]);
mem.SelectStockObject(NULL_PEN);
mem.SelectObject(&br1);
mem.Rectangle(a+1,b+1,a+m_nZoom+1,b+m_nZoom+1);
}
br1.DeleteObject(); 
还有就是我要是只
for(int i=0;i<1000;i++)
{
CBrush br1;
br1.CreateSolidBrush (tpcolor[i]);
mem.SelectStockObject(NULL_PEN);
mem.SelectObject(&br1);
mem.Rectangle(a+1,b+1,a+m_nZoom+1,b+m_nZoom+1);
}
这样会出现什么错误~ 
还有就是我的软件在XP下是可行的,可现在在98下就是不行了,会出现这样的错误
tpcolor[i]中的颜色很少有的一样的~~~~~~

解决方案 »

  1.   

    还有就是我的软件在XP下是可行的,可现在在98下就是不行了,会出现这样的错误
    袜机制板 在 0167:004119a0 的模块
     袜机制板.EXE 中导致无效页错误。
      

  2.   

    你需要保存原来的GDI资源,并在使用后恢复,否则会出现资源泄漏,尤其在98下面:for(int i=0;i<1000;i++)
    {
    CBrush br1;
    br1.CreateSolidBrush (tpcolor[i]);
    CPen *pPenOld = mem.SelectStockObject(NULL_PEN);
    CBrush *pBrushOld = mem.SelectObject(&br1);
    mem.Rectangle(a+1,b+1,a+m_nZoom+1,b+m_nZoom+1);
    mem.SelectStockObject(pBrushOld);
    mem.SelectStockObject(pPenOld);
    br1.DeleteObject();
    }
      

  3.   

    为什么不是这样CBrush br1;
    br1.CreateSolidBrush (RGB(255,0,0);
    CPen *pPenOld = mem.SelectStockObject(NULL_PEN);
    CBrush *pBrushOld = mem.SelectObject(&br1);
    for(int i=0;i<1000;i++)
    {
    br1.CreateSolidBrush (tpcolor[i]);
    mem.SelectStockObject(NULL_PEN);
    mem.SelectObject(&br1);
    mem.Rectangle(a+1,b+1,a+m_nZoom+1,b+m_nZoom+1);
    }
    mem.SelectStockObject(pBrushOld);
    mem.SelectStockObject(pPenOld);
    br1.DeleteObject();
    不是说循环里放的东西越少越好吗~?
      

  4.   

    呵呵,看来楼主弄错概念了。
    在for循环里,不断地create,selectobject,但没有再恢复,其结果就是资源泄漏。
    记住,每个selectobject(newobject)都要有配套的selectobject(oldobject)
      

  5.   

    selectobject(newobject)和selectobject(oldobject)不都是选入设备吗~?这个只是在delete newobject的时候怕还在使用而出错吧~???????
      

  6.   

    为什么不是这样CBrush br1;
    for(int i=0;i<1000;i++)
    {
    br1.CreateSolidBrush (RGB(255,0,0);
    CPen *pPenOld = mem.SelectStockObject(NULL_PEN);
    CBrush *pBrushOld = mem.SelectObject(&br1);
    mem.Rectangle(a+1,b+1,a+m_nZoom+1,b+m_nZoom+1);
    mem.SelectStockObject(pBrushOld);
    mem.SelectStockObject(pPenOld);
    br1.DeleteObject();
    }
    不是说循环里放的东西越少越好吗~?
      

  7.   

    你需要保存原来的GDI资源,并在使用后恢复,否则会出现资源泄漏,尤其在98下面:
    这有什么乱的?选进资源就需要选出,一一对应。
      

  8.   

    我现在说一下我的想法,是不是先保存原来的GDI资源,然后要br1.CreateSolidBrush 一个,这样的话就一定要delete一个,不过要在delete以前选入原来的GDI资源,不然会泄漏~~~