在OnVScroll上刷新图像

时间:2014-11-19 09:32:15

标签: c++ mfc scroll

我正在尝试将大数据集显示到图表中。不幸的是,这会导致闪烁,因为在任何更新期间会多次调用OnPaint()。同时我不需要不断更新此图表;只有在加载程序时才足够。

我找到了一种方法来解决它,通过覆盖OnEraseBkgnd()每次更新时返回1。然而,这样做的副作用是,当我进行垂直滚动时,如果我滚动得太远,该图形将被“切断”。

将滚动条向上移动我将得到一个截断图,它不会重新绘制(因为我不再重新绘制OnPaint()中的图形)。

从本质上讲,我正在寻找的是一种重新绘制图形的方法,当且仅当它被“切断”时,由于滚动视图。

谢谢!

2 个答案:

答案 0 :(得分:0)

MSDN中名为DRAWCLI的MFC示例是一个示例程序,包括图像滚动和使用屏幕外位图来消除闪烁。它运作得很好。

答案 1 :(得分:0)

正如Jonathan Potter所建议的那样,记忆DC还有很长的路要走。

当您的视图变得无效时,消息处理程序将WM_PAINT发送到您的OnPaint处理函数,该函数将在创建DC对象后调用OnDraw成员函数。

在OnDraw功能中使用内存DC。

内存DC有一个很好的代码示例,它很容易实现here