【发布时间】:2014-01-24 12:46:59
【问题描述】:
我需要反复重绘一个显示某种形式的连续分析的窗口。现在:
1)如果我在画完后在WM_PAINT中这样做,我基本上会杀死其他人的画,所以它不可用。
2) 如果我在计时器中这样做,那就有点滞后了。
那么最好的方法是什么,以便频繁地重新绘制窗口,但是当操作系统忙于处理某些数据或通过绘制其他应用程序时,它会降低速率。我一直认为操作系统应该负责在进程之间分配 CPU 功率,让图形处于次要位置,以确保实际处理有足够的时间,但在 Windows 和 Mac 上看起来都不是这样。
【问题讨论】:
-
如果您更改显示它的视图后面的数据,
InvalidateRect()触发paint-bit 应该没问题。但是,您不需要使除已更新区域之外的任何区域无效,因此您可能需要采取额外措施来做到这一点。但是从不在你完成WM_PAINT之后(即在你的EndPaint之后)InvalidateRect。这太疯狂了。而是从你的数据计算代码向你的队列发布线程事件或用户事件并在您的窗口 procInvalidateRect和 可能UpdateWindow中有 那个 处理程序。 -
嗯,这或多或少是我现在正在做的事情。在 wm_paint 中无效的极端事情我只是为了“好玩”而尝试的,它真的没有多大意义。虽然如果操作系统能够很好地分配 cpu,这将是获得最大帧速率而不用请求填充队列的理想选择。
-
可可标签是因为我对 mac 上的相同内容感兴趣。
标签: cocoa winapi paint wm-paint