我在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等函数都无法执行
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等函数都无法执行
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
}
原来是出在GetDC()函数上,一般以为CDC * pDC=GetDC()没什么的,当成普通的指针,其实不然,每个DC都必须ReleaseDC(pDC)才行