我正在尝试将大数据集显示到图表中。不幸的是,这会导致闪烁,因为在任何更新期间会多次调用OnPaint()
。同时我不需要不断更新此图表;只有在加载程序时才足够。
我找到了一种方法来解决它,通过覆盖OnEraseBkgnd()
每次更新时返回1。然而,这样做的副作用是,当我进行垂直滚动时,如果我滚动得太远,该图形将被“切断”。
将滚动条向上移动我将得到一个截断图,它不会重新绘制(因为我不再重新绘制OnPaint()
中的图形)。
从本质上讲,我正在寻找的是一种重新绘制图形的方法,当且仅当它被“切断”时,由于滚动视图。
谢谢!
答案 0 :(得分:0)
MSDN中名为DRAWCLI的MFC示例是一个示例程序,包括图像滚动和使用屏幕外位图来消除闪烁。它运作得很好。
答案 1 :(得分:0)
正如Jonathan Potter所建议的那样,记忆DC还有很长的路要走。
当您的视图变得无效时,消息处理程序将WM_PAINT发送到您的OnPaint处理函数,该函数将在创建DC对象后调用OnDraw成员函数。
在OnDraw功能中使用内存DC。
内存DC有一个很好的代码示例,它很容易实现here。