Проблема с перерисовкой

  • Автор темы Young Programmer
  • Дата начала
Y

Young Programmer

Гость
#1
В общем проблема в следующем: приложение диалоговое, используется MFC в опеределенной области окна рисуется много прямоугольников с помощью объекта класса CPaintDC.
Если на этот прямоугольник залазит другая форма, или приложение сворачивается и восстанавливается то прямоугольник исчезает. Подскажите пожалуйста, как зафиксировать нарисованное чтобы оно не исчезало??
Прямоугольники рисуются не в OnPaint(), а в обработчике нажатия кнопки. Может есть какая функция?
 

grigsoft

Well-Known Member
15.11.2005
735
0
#2
Надо просто понять что происходит - ты рисуешь, потом окно затирается, вызывается OnPaint, в которым ты ничего не делаешь, и вуаля - мы имеем чистое окно. Соотвественно чтобы это исправить, нажатие кнопки должно лишь изменять состояние отрисовываемого объекта (листа со списком прямоугольников), а OnPaint должен все это отображать.
 
Y

Young Programmer

Гость
#3
Ну да, процесс "вуаля - мы имеем чистое окно" я понимаю :( Действительно, есть массив со списком прямоугольников, т.е. Вы предлагаете по нажатию кнопки редактировать каждый прямоугольник в массиве как нужно, а затем вызывать OnPaint() где они будут отрисовываться? Я правильно понимаю? Просто об этом я задумывался, но не хотелось уже готовое приложение менять (не работает только отрисовка), думал может есть функция которая запрещает перерисовывать определенную область при сворачивании изменении размеров и т.д. Вроде краем уха слышал, что такая есть, но это был очень маленький край уха и где искать подобную функция даже не представляю :) Но спасибо хоть за какой совет!! Если вдруг никто ничего больше не предложит, наверно придеться переделывать.
 

grigsoft

Well-Known Member
15.11.2005
735
0
#4
Функции такие есть, например LockWindowUpdate, но делают они совсем не то, что ты хочешь. Есть и альтернативные пути, например после рисования снять копию в битмап, и в OnPaint этот битмап отрисовывать, но все это - костыли, поддержка и отладка которых займет больше времени чем переписывание.
 
D

Dimmuborgir

Гость
#5
но все это - костыли, поддержка и отладка которых займет больше времени чем переписывание.
На самом деле это не так трудно как кажется. В одной из тем я уже выкладывал код, преимущества - исчезает дрожжь при перерисовании.
 
Y

Young Programmer

Гость
#6
Кстати да, перерисовать в битмап было бы неплохо, но уже поздно, тупо перенес часть кода в OnPaint(). Всем спасибо за полезные советы!