![]() |
|
|
![]()
|
|
| MadDog__ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 2.10.2007 Репутация: нет Всего: нет |
При скролле или при попадании другого окна на окно программы остаеться след окна, а при сворачивании и обратном востановлении окна программы все отрисовываеться по новому по нормальному. предпологаю что надо вот тут обрабатвать?
зарание благодарен))
вот скрин |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Так ты сам ответ привел - EraseBkgnd ничего не делает. Надо полагать, ты с двойной буферизацией упражнялся?
-------------------- ... |
|||
|
||||
| MadDog__ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 2.10.2007 Репутация: нет Всего: нет |
Да использую двойную буфферизацию. Я так понимаю надо стереть весь фон и перерисовать все заново. только как стереть?
И еще вопрос? программа считывает данные из ODBC и выводит данные на экран, я захтел сделать что то типа замедленного проигрывателя просто начал делать Sleep(15); все хорошо идет как надо медленно рисуеться, но вэтот момент когда идет перерисовка меню оказываеться заблокированно т.к процесс и поток заняты рисованием и я не могу прервать этот процесс рисования! читал на форуме что рисовку нежелательно выносить в другой поток(( тогда как можно поступить в такой ситуации? Это сообщение отредактировал(а) MadDog__ - 11.9.2012, 13:23 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Да, только не стереть-перерисовать, а скопировать кусок этого-самого буфера. Т.е. рисовать в буфер надо не в момент OnPaint\OnErase, а только когда что-то меняется. Например, когда часть окна временно перекрыли, содержимое буфера ведь никак не меняется, так зачем его перерисовывать, когда достаточно скопировать. Но при этом буфер надо, естественно, постоянно хранить. Насчет замедленной перерисовки, рисовать в другом потоке на экран - нельзя. Но в буфер можно, конечно. Это стоит делать, если перерисовка буфера занимает заметное время и подтормаживает. А для имитации замедленного вывода не стоит замедлять саму перерисовку, можно делать вывод по кускам на экран: первый раз 1 десятую высоты (например), второй - 2, и т.д. И не через Sleep, конечно, а по таймеру, например. Т.е. как только буфер перерисовывается, ставим таймер, выводим нужную часть буфера и запоминаем эту часть. На каждом таймере делаем себе Invalidate, пока все не выведется, а на каждом Paint копируем все большую и большую часть экрана. Как только выведем все, таймер отключаем. -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |