Двойная буфферизация
И вот еще. Есть view, и не хочется перерисовывать целиком при каждом случае, если нужно перерисовать только часть. Есть какие-нибудь стандартные подходы?
Буду рад любому ответу.
[EMAIL]o@gala.net[/EMAIL]
Я что-то рисую. Потом делаю Invalidate().
Это можно сделать как-то по-другому?
On 2002-09-30 1702, Anonymous wrote
Никак не могу разобраться сам, а в литературе и на сайтах с примерами найти это - как сделать в MFC двойную фуфферизацию при рисовании?
надо создать CBitmap,размером с окно, используя CreateCompatibleBitmap, и еще CDC используя CreateCompatibleDC. В CDC выбрать этот битмап. Рисовать надо в этот новый CDC, а при OnPaint делать BitBlt из нового CDC в окнонный.
И вот еще. Есть view, и не хочется перерисовывать целиком при каждом случае, если нужно перерисовать только часть. Есть какие-нибудь стандартные подходы?
InvalidateRect()
UpdateWindow()
и передаёшь ректангл который надо перерисовать, Windows отсекает все вне этого прямоугольника
CDC dc;
dc.CreateCompatibleDC(pDC);
//определение его размеров
CRect m_RectClient;
GetClientRect(&m_RectClient);
//добавление битмапа
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC, m_RectClient.right,m_RectClient.bottom);
dc.SelectObject(&bmp);
dc.PatBlt(0,0,m_RectClient.right, m_RectClient.bottom,WHITENESS);
...
//Здесь что-то рисуем на невидимом слое.
...
//вывод на экран
pDC->BitBlt(0, 0, m_RectClient.right, m_RectClient.bottom, &dc, 0, 0, SRCCOPY);
//удаление невидимого слоя
dc.DeleteDC();
On 2002-10-01 1539, Shooter wrote
//создание невидимого слоя
CDC dc;
dc.CreateCompatibleDC(pDC);
Спасибо за код. Но мерцание еще более жуткое. Но, в общем-то разобрался, InvalidateRect() помогло.
Другая проблема неожиданно выскочила.
Я на этом CDC очень активно рисую, и через некоторое время все dialog'и почему-то показываются с таким очень некрасивым шрифтом, ну как будто Windows вот-вот свалится, бывает. 13-й Arial полужирный, грубо говоря. И мне кажется, что это связано.
Никто с таким не сталкивался?
Заранее спасибо.
чтобы небыло мерцания, рисовать из невидимога cdc нада в OnPaint, а не захватывать контекст GetDC'ом
вот так-та