Здравствуйте.
Пишу програмку — диалог, в контексте которого постоянно приходиться перерисовывать битмап, а он собака, ну так противно перерисовывается, аж смотреть на эти мерцания не хочется. Может кто подскажет как избавиться(или хоть как-то улучшить).
Схема действий такова:
-- получаем сообщение
WM_TIMER
-- делаем
InvalidateRect(...)
-- делаем
BitBlt(...) в рамках указанного
rect'а
-- получаем мерцающую картинку
Как все это выглядит можно узнать здесь —
http://ccfit.nsu.ru/~eryshov/files/BallKick.rar, советы принимаются в любом количестве.
Спасибо.
Хм...

Как помочь не знаю, но штучка клёвая
Здравствуйте, Par-zzz, Вы писали:
PZ>Здравствуйте.
PZ>Пишу програмку — диалог, в контексте которого постоянно приходиться перерисовывать битмап, а он собака, ну так противно перерисовывается, аж смотреть на эти мерцания не хочется. Может кто подскажет как избавиться(или хоть как-то улучшить).
PZ>Схема действий такова:
PZ> -- получаем сообщение WM_TIMER
PZ> -- делаем InvalidateRect(...)
PZ> -- делаем BitBlt(...) в рамках указанного rect'а
PZ> -- получаем мерцающую картинку
Как реализована обработка WM_PAINT? Мячик рисуется на основном битмапе, а потом все это переносится в окно? Если так, то мерцания быть не должно (или наоборот все окно будет мерцать

, но это зависит от стиля окна), но будет медленно. Ты расскажи подробнее.
Я бы использовал DirectDraw
Здравствуйте, Par-zzz, Вы писали:
skip
А InvalidateRect ты как вызываешь? Попробуй последний параметр задать FALSE — тогда область стираться не будет, ты ведь все равно ее всю закроешь BitBlt.
А вообще-то нужно исходный код рисования посмотреть, чтобы более полезный совет дать
Здравствуйте, Par-zzz, Вы писали:
Она, гадина, стирать сама любит. А надо ей не давать. И рисовать через память.
Я обычно делаю так:
BOOL CTraceView::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
void CTraceView::OnPaint()
{
CPaintDC dc(this);
CRect rc; GetClientRect(&rc);
CDC memdc; memdc.CreateCompatibleDC(&dc);
CBitmap bmp; bmp.CreateCompatibleBitmap(&dc, rc.Width(),rc.Height());
CBitmap* old =memdc.SelectObject(&bmp);
OnDraw(&memdc);
dc.BitBlt(0,0,rc.Width(),rc.Height(),&memdc,0,0,SRCCOPY);
memdc.SelectObject(old);
}
А в OnDraw уже рисую и ни о чём не думаю