为什么要使用该区域进行验证/无效?

时间:2015-09-08 01:08:19

标签: c winapi

当窗口的一部分需要重新绘制时,该区域被标记为无效,当我重新绘制该区域时(在WM_PAINT事件处理程序中),我应该将该区域标记为有效。

但是我不明白将该区域标记为无效以及稍后验证它的必要性,我的意思是为什么不执行以下操作:当一个区域需要重新绘制时,只需发送一个{{1消息(不将区域标记为无效)然后重新绘制区域(不将其标记为有效)。

2 个答案:

答案 0 :(得分:1)

将区域标记为INVALID可让Windows知道需要更新。这是为了允许屏幕的部分绘制,而不是每次通过都完全更新绘制区域。

最好只在大多数静态程序中使变更区域无效,以减少抽取开销。

在绘制完成后验证它们,让Windows知道该区域已刷新,不需要再次重绘。

如果您有以下类型的窗口,那么这将是有用的示例:

enter image description here

当滚动列表框或勾选复选框时,最好只使窗口的那个区域无效,而不是每次需要更新列表框或复选框以显示新滚动时重绘整个窗口位置或复选标记。

答案 1 :(得分:1)

想象一下有人在栅栏上扔球。你重击栅栏的次数是多少次?不,你重新绘制围栏,如果,并且只有当你重新粉刷自上次重击球以来。

您建议任何时候将某个区域标记为无效,而应将WM_PAINT消息发送给该应用程序。这个问题的一大问题是,如果同一区域多次失效,那么会导致发送许多WM_PAINT条消息,并且无法知道其中许多消息已被处理过。因此,当您最需要高性能时(因为您在绘图时落后),您必须反复重复相同的绘图操作。这没有意义。