brush=(HBRUSH)CreateSolidBrush(RGB(255,255,0)); 
   brush=(HBRUSH)SelectObject(hDC,brush);   ........   SelectObject(hDC,brush);
   DeleteObject((HGDIOBJ)brush);
为什么我创建的brush释放不掉,我每秒调用下上面的代码,过几秒内存就增加一点,为什么?哪个地方写错啦?恳请赐教,最好写个简单例子,参考下,不胜感激!

解决方案 »

  1.   

      brush=(HBRUSH)CreateSolidBrush(RGB(255,255,0));             
      HBRUSH hOldbr =(HBRUSH)SelectObject(hDC,brush);   ........   SelectObject(hDC,hOldbr);
       DeleteObject(brush);
      

  2.   

    试一下Create 一个全局的HBRUSH  看看还有问题不。。
      

  3.   

    HBRUSH 要定义全局的在初始化的时候Create之后不要再调用CreateSolidBrush函数了
      

  4.   

    mem DC也没delete吧?如果是memdc,也要:
    DeleteDC();如果是Get来的就要ReleaseDC().
      

  5.   

       brush=(HBRUSH)CreateSolidBrush(RGB(255,255,0));             
       brush=(HBRUSH)SelectObject(hDC,brush);//brush 已经不再是你创建的那个brush了   ........   SelectObject(hDC,brush);//这里的返回值也许还是你创建的那个brush-》brush=(HBRUSH)SelectObject(hDC,brush);
       DeleteObject((HGDIOBJ)brush);
      

  6.   


    void MyDraw::Draw()
    {
        HDC hDC=::GetDC(hHwnd);
        HBRUSH brush=(HBRUSH)CreateSolidBrush(RGB(0,0,0));  
        FillRect(hDC,CRect(0,0,96,96),brush);    DrawMyPic(hDC);  DeleteObject(brush);
      ReleaseDC(hHwnd,hDC);
    }void DrawMyPic(hDC:HDC)
    {
      brush=(HBRUSH)CreateSolidBrush(RGB(255,255,0));            
      HBRUSH hOldbr =(HBRUSH)SelectObject(hDC,brush);   ........   SelectObject(hDC,hOldbr); 
      DeleteObject(brush); 
      
    }
    下面用setTimer调用,就这么简单的过程,怎么可能内存在每隔10秒左右就增加4呢,而且蛮有规律的.一直加下去,特奇怪!void CALLBACK TimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
    {
        MyDraw iDraw;
        iDraw.Draw();
    }void CModelClockDlg::OnButton1() 
    {
       int nTimerID=::SetTimer(NULL,NULL,1000,TimerProc);
    }请大虾帮忙分析下,到地是什么环节出问题了?
      

  7.   

    void MyDraw::Draw()
    {
        HDC hDC=::GetDC(hHwnd);
        HBRUSH brush=(HBRUSH)CreateSolidBrush(RGB(0,0,0));  
        FillRect(hDC,CRect(0,0,96,96),brush);    // DrawMyPic(hDC); 搞掉这个不会泄漏了吧, 搞掉这个都泄漏的话,那根本问题就不是这儿的问题了.  DeleteObject(brush);
      ReleaseDC(hHwnd,hDC);
    }====================================================================那么就是这个了:void DrawMyPic(hDC:HDC)
    {
      brush=(HBRUSH)CreateSolidBrush(RGB(255,255,0));
      HBRUSH hOldbr =(HBRUSH)SelectObject(hDC,brush);   ........   SelectObject(hDC,hOldbr); 
      DeleteObject(brush); 
      
    }这个函数有什么问题是没法子看清的..
      

  8.   

    用任务管理器查看进程的“GDI对象”,如果数量基本不变就没问题。物理内存是系统调度,数量增加不能说明问题。
      

  9.   

    void DrawMyPic(hDC:HDC) 

      brush=(HBRUSH)CreateSolidBrush(RGB(255,255,0)); 
      HBRUSH hOldbr =(HBRUSH)SelectObject(hDC,brush);   ........   SelectObject(hDC,hOldbr); 
      DeleteObject(brush); 
      

    还有,如果你定时器内调用,建议不要经常创建与删除,所以,画刷建议用一个全局的!
      

  10.   

    同意8楼的说法,可以看看DeleteObjectd 的返回值。