Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Награмождения при перерисовке, перерисовка 
:(
    Опции темы
MadDog__
Дата 7.9.2012, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 2.10.2007

Репутация: нет
Всего: нет



При скролле или при попадании другого окна на окно программы остаеться след окна, а при сворачивании и обратном востановлении окна программы все отрисовываеться по новому по нормальному. предпологаю что надо вот тут обрабатвать?

зарание благодарен))

Код

BOOL CFootPView::OnEraseBkgnd(CDC* pDC)
{

    return TRUE;
}



вот скрин user posted image
PM MAIL   Вверх
Earnest
Дата 10.9.2012, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Так ты сам ответ привел - EraseBkgnd ничего не делает. Надо полагать, ты с двойной буферизацией упражнялся?


--------------------
...
PM   Вверх
MadDog__
Дата 11.9.2012, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 2.10.2007

Репутация: нет
Всего: нет



Да использую двойную буфферизацию. Я так понимаю надо стереть весь фон и перерисовать все заново. только как стереть?
И еще вопрос? программа считывает данные из ODBC и выводит данные на экран, я захтел сделать что то типа замедленного проигрывателя просто начал делать Sleep(15); все хорошо идет как надо медленно рисуеться, но вэтот момент когда идет перерисовка меню оказываеться заблокированно т.к процесс и поток заняты рисованием и я не могу прервать этот процесс рисования! читал на форуме что рисовку нежелательно выносить в другой поток(( тогда как можно поступить в такой ситуации?

Это сообщение отредактировал(а) MadDog__ - 11.9.2012, 13:23
PM MAIL   Вверх
Earnest
Дата 12.9.2012, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(MadDog__ @  11.9.2012,  14:12 Найти цитируемый пост)
Я так понимаю надо стереть весь фон и перерисовать все заново. только как стереть?

Да, только не стереть-перерисовать, а скопировать кусок этого-самого буфера.
Т.е. рисовать в буфер надо не в момент OnPaint\OnErase, а только когда что-то меняется. Например, когда часть окна временно перекрыли, содержимое буфера ведь никак не меняется, так зачем его перерисовывать, когда достаточно скопировать. Но при этом буфер надо, естественно, постоянно хранить.

Насчет замедленной перерисовки, рисовать в другом потоке на экран - нельзя. Но в буфер можно, конечно. Это стоит делать, если перерисовка буфера занимает заметное время и подтормаживает. А для имитации замедленного вывода не стоит замедлять саму перерисовку, можно делать вывод по кускам на экран: первый раз 1 десятую высоты (например), второй - 2, и т.д. И не через Sleep, конечно, а по таймеру, например. Т.е. как только буфер перерисовывается, ставим таймер, выводим нужную часть буфера и запоминаем эту часть. На каждом таймере делаем себе Invalidate, пока все не выведется, а на каждом Paint копируем все большую и большую часть экрана. Как только выведем все, таймер отключаем. 



--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0427 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.