Я пытаюсь отобразить большой набор данных в граф. К сожалению, это вызывает мерцание, поскольку OnPaint()
вызывается несколько раз во время любого обновления. И в то же время мне не нужно, чтобы этот график постоянно обновлялся; только один раз при загрузке программы достаточно.
Я нашел способ решить эту проблему, переопределив OnEraseBkgnd()
чтобы возвращать 1 каждый раз что-то обновление. Однако побочным эффектом этого является то, что когда я делаю вертикальную прокрутку, этот график будет "обрезаться", если я прокручу слишком далеко.
Возвращаясь к прокрутке, я получаю график отсечки, который не перерисовывается (потому что я больше не перерисовываю график в OnPaint()
).
По сути, то, что я ищу, - это метод перерисовки графика, если и только если он "обрезается" из-за прокрутки.
Благодарю!
Как рекомендовал Джонатан Поттер, память DC - это путь.
Когда ваше представление становится недействительным, обработчик сообщения отправляет WM_PAINT в вашу функцию обработчика OnPaint, которая будет вызывать функцию члена OnDraw после создания объекта DC.
Вы используете DC памяти в функции OnDraw.
Хороший пример кода памяти DC, который действительно легко реализовать здесь.
Пример MFC в MSDN с именем DRAWCLI - это примерная программа, которая включает прокрутку изображения и использование растрового изображения вне экрана для устранения мерцания. Он работает очень хорошо.
WM_PAINT
это переместить его на экран.