• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Young Programmer

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

grigsoft

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

Young Programmer

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

grigsoft

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

Dimmuborgir

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

Young Programmer

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!