Обновление изображения при OnVScroll

0

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

Я нашел способ решить эту проблему, переопределив OnEraseBkgnd() чтобы возвращать 1 каждый раз что-то обновление. Однако побочным эффектом этого является то, что когда я делаю вертикальную прокрутку, этот график будет "обрезаться", если я прокручу слишком далеко.

Возвращаясь к прокрутке, я получаю график отсечки, который не перерисовывается (потому что я больше не перерисовываю график в OnPaint()).

По сути, то, что я ищу, - это метод перерисовки графика, если и только если он "обрезается" из-за прокрутки.

Благодарю!

  • 3
    Я бы попробовал отрисовать график за пределами экрана (память DC); Таким образом, все, что вам нужно сделать в WM_PAINT это переместить его на экран.
Теги:
scroll
mfc

2 ответа

0

Как рекомендовал Джонатан Поттер, память DC - это путь.

Когда ваше представление становится недействительным, обработчик сообщения отправляет WM_PAINT в вашу функцию обработчика OnPaint, которая будет вызывать функцию члена OnDraw после создания объекта DC.

Вы используете DC памяти в функции OnDraw.

Хороший пример кода памяти DC, который действительно легко реализовать здесь.

0

Пример MFC в MSDN с именем DRAWCLI - это примерная программа, которая включает прокрутку изображения и использование растрового изображения вне экрана для устранения мерцания. Он работает очень хорошо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню