Re: Вывод графики в Visual C++
Добрый день, Андрей.
ресурса,
Посмотри методы Invalidate() по всем событиям и замени на
Invalidate(FALSE). У меня тоже было мигание - теперь нет совсем.
Рисуй не в том CDC, который ты получил в обработчике
OnDraw, а создай совместимый CDC в памяти, и рисуй в него. А потом (в
конце метода OnDraw) одной командой скопируешь содержимое контекста в
памяти в тот CDC, который получил в OnDraw.
Поясняю:
OnDraw(CDC* pDC)
{
CRect wRect;
GetClientRect( &wRect );
CDC memDC; // контекст в памяти
if( !memDC.CreateCompatibleDC( pDC ) || memDC.GetSafeHdc() == NULL )
{
TRACE("can't create DC\n");
return;
}
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC, wRect.Width(), wRect.Height());
CBitmap* oldbmp = memDC.SelectObject(&bmp);
// на всяний случай сотрем все сами
COLORREF bkcolor = ::GetSysColor( COLOR_BTNFACE );
memDC.FillSolidRect( wRect, bkcolor ); // RGB( 192, 192, 192 )
// здесь рисуем все, что нужно (в контекст в памяти)
mamDC.MoveTo(0,0);
memDC.LineTo( 100,100 );
memDC.Draw3dRect( wRect, RGB(255,255,255), RGB(0,0,0) );
// скопировать из контекста в памяти в отображаемый
pDC->BitBlt( 0, 0, wRect.Width(), wRect.Height(), &memDC, 0, 0,
SRCCOPY );
// очистить
memDC.SelectObject(oldbmp);
bmp.DeleteObject();
memDC.DeleteDC();
}
При такой реализации можно рисовать много объектов - замедления не
будет. Мне приходилось выполнять сложные графические операции таким
способом - жалоб нет.
С уважением, Николай
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru
-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru
http://subscribe.ru/ mailto:ask@subscribe.ru