我在mousemove中调用一个函数
void CTableEx::DrawDragRect(CDC *pDC, const CRect &rect, int nDrawMode)
{
CPen newPen(PS_DOT,1,RGB(255,0,0));
CPen* pOldPen=pDC->SelectObject(&newPen);
int nOldMode=pDC->SetROP2(R2_NOT); pDC->MoveTo(rect.left,rect.top);
pDC->LineTo(rect.right,rect.top);
pDC->LineTo(rect.right,rect.bottom);
pDC->LineTo(rect.left,rect.bottom);
pDC->LineTo(rect.left,rect.top); pDC->SetROP2(nOldMode);
pDC->SelectObject(pOldPen);
newPen.DeleteObject();
pOldPen=NULL;
}
多次移动触发mousemove事件后(不停的移动,大约3分钟后),系统资源就崩溃,出现系统资源不足的错误,而且createpen等函数都无法执行

解决方案 »

  1.   

    这段代码好像没有问题,可能是mousemove函数里面.帖出来看看.
      

  2.   

    这里是没有问题的,主要看看刷新函数有没有问题,如OnPaint,OnDraw函数。
      

  3.   

    这是OnPaint函数,主要原因是GDI泄漏,不知道什么原因
    void CTableEx::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting
    CRect rect;
    GetClientRect(&rect);
    CBrush newbrush, * oldbrush;
    newbrush.CreateSolidBrush(RGB(255,255,255));
    oldbrush=dc.SelectObject(&newbrush);
    dc.FillRect(&rect, &newbrush);
    dc.SelectObject(oldbrush);
    newbrush.DeleteObject();
    oldbrush=NULL;
    // Do not call CWnd::OnPaint() for painting messages
    }
      

  4.   

    搞定:)
    原来是出在GetDC()函数上,一般以为CDC * pDC=GetDC()没什么的,当成普通的指针,其实不然,每个DC都必须ReleaseDC(pDC)才行