Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Двойная буфферизация

Аноним
Никак не могу разобраться сам, а в литературе и на сайтах с примерами найти это - как сделать в MFC двойную фуфферизацию при рисовании?

И вот еще. Есть view, и не хочется перерисовывать целиком при каждом случае, если нужно перерисовать только часть. Есть какие-нибудь стандартные подходы?

Буду рад любому ответу.

[EMAIL]o@gala.net[/EMAIL]
356
30 сентября 2002 года
molnij
159 / / 20.06.2000
Хм-м, а просто перерисовывать rect не пробовал или я тебя не правильно понял ???
Аноним
В каком смысле?
Я что-то рисую. Потом делаю Invalidate().

Это можно сделать как-то по-другому?
380
01 октября 2002 года
Arestov
285 / / 20.09.2000
Цитата:

On 2002-09-30 1702, Anonymous wrote
Никак не могу разобраться сам, а в литературе и на сайтах с примерами найти это - как сделать в MFC двойную фуфферизацию при рисовании?



надо создать CBitmap,размером с окно, используя CreateCompatibleBitmap, и еще CDC используя CreateCompatibleDC. В CDC выбрать этот битмап. Рисовать надо в этот новый CDC, а при OnPaint делать BitBlt из нового CDC в окнонный.

Цитата:

И вот еще. Есть view, и не хочется перерисовывать целиком при каждом случае, если нужно перерисовать только часть. Есть какие-нибудь стандартные подходы?



InvalidateRect()
UpdateWindow()
и передаёшь ректангл который надо перерисовать, Windows отсекает все вне этого прямоугольника

1.0K
01 октября 2002 года
Shooter
7 / / 20.05.2000
//создание невидимого слоя
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 полужирный, грубо говоря. И мне кажется, что это связано.

Никто с таким не сталкивался?

Заранее спасибо.

380
01 октября 2002 года
Arestov
285 / / 20.09.2000
всё что саздал(brush,pen,rgn,bitmap и пр) надо обизательна удолить, если объехт используешь больше раза, сосдай его зарание и используй скока нада, а патом удали.

чтобы небыло мерцания, рисовать из невидимога cdc нада в OnPaint, а не захватывать контекст GetDC'ом

вот так-та
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог