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

Тема в разделе "MS Visual C++", создана пользователем Young Programmer, 25 май 2008.

Наш партнер Genesis Hackspace
  1. Young Programmer

    Young Programmer Гость

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

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Надо просто понять что происходит - ты рисуешь, потом окно затирается, вызывается OnPaint, в которым ты ничего не делаешь, и вуаля - мы имеем чистое окно. Соотвественно чтобы это исправить, нажатие кнопки должно лишь изменять состояние отрисовываемого объекта (листа со списком прямоугольников), а OnPaint должен все это отображать.
     
  3. Young Programmer

    Young Programmer Гость

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

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Функции такие есть, например LockWindowUpdate, но делают они совсем не то, что ты хочешь. Есть и альтернативные пути, например после рисования снять копию в битмап, и в OnPaint этот битмап отрисовывать, но все это - костыли, поддержка и отладка которых займет больше времени чем переписывание.
     
  5. Dimmuborgir

    Dimmuborgir Гость

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

    Young Programmer Гость

    Кстати да, перерисовать в битмап было бы неплохо, но уже поздно, тупо перенес часть кода в OnPaint(). Всем спасибо за полезные советы!
     
Загрузка...
Похожие Темы - Проблема перерисовкой
  1. san3k
    Ответов:
    0
    Просмотров:
    1.252
  2. makaset
    Ответов:
    0
    Просмотров:
    31
  3. vismut
    Ответов:
    2
    Просмотров:
    164
  4. Marlen
    Ответов:
    17
    Просмотров:
    472
  5. сергей799
    Ответов:
    1
    Просмотров:
    248

Поделиться этой страницей