Привет всем.
Такая проблема: в моей функции DrawGraph примерно через 1-2 минуцты работы программы происходит ошибка при очередном создании контекста dc. Функция вызывается на WM_TIMER (он установлен на 10мсек). Привожу код:
void CGraphView::OnDraw(CDC* pDC)
{
//рисуем график
DrawGraph(pDC);
}
void CGraphView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
// чего-то тут делаю
..............................................
CDC *pDC = this->GetDC();
DrawGraph(pDC);
}
void CGraphView::DrawGraph(CDC *pDC)
{
CRect clientRect;
GetClientRect(&clientRect);
CDC dc;
try{
if(!dc.CreateCompatibleDC(pDC)) throw 1;
}
catch(int)
{
MessageBox("Ошибка создания контекста!");
return;
}
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC,clientRect.Width(),clientRect.Height());
CBitmap* oldBitmap = dc.SelectObject(&bmp);
//çàïîëíÿåì ñíà÷àëà íóæíûì öâåòîì áýêãðàóíä
CBrush bkgrndBrush(RGB(0,0,0));
dc.FillRect(&clientRect,&bkgrndBrush);
double kX=(double)clientRect.Width()/1000;
p = Y.begin();
double y = clientRect.Height()/2-(*(p++)*100);
CPen pen1(PS_SOLID,1,RGB(255,255,255));
CPen* oldPen = dc.SelectObject(&pen1);
dc.MoveTo(0,clientRect.Height()/2);
dc.LineTo(clientRect.Width(),clientRect.Height()/2);
dc.SelectObject(oldPen);
CPen pen2(PS_SOLID,1,RGB(255,0,0));
oldPen = dc.SelectObject(&pen2);
dc.MoveTo(0,y);
for(int i=0;i<Y.size()-1;i++)
{
y = clientRect.Height()/2-(*(p++)*clientRect.Height()/2);
double xx = (double)i*kX;
dc.LineTo((int)xx,y);
}
dc.SelectObject(oldPen);
pDC->BitBlt( 0,0,clientRect.Width(),clientRect.Height(),
&dc,0,0,SRCCOPY);
dc.SelectObject(oldBitmap);
dc.DeleteDC();
}
Вроде бы возвращаю везде все GDI-объекты, удаляю сам dc....
В чём трабл??
Буду благодаврен за совет,
Роман.