InvalidateRect
не сразу перерисовывает окно. Он просто «планирует» будущую перерисовку для конкретной прямоугольной области окна. Используя InvalidateRect
, вы можете запланировать столько областей, сколько хотите, чтобы они накапливали в некотором внутреннем буфере. Фактическая перерисовка для всех накопленных запланированных областей произойдет позже, когда окну больше нечего делать. (Конечно, если окно бездействует в момент, когда вы выполняете вызов InvalidateRect
, перерисовка произойдет немедленно).
Вы также можете принудительно выполнить перерисовку для всех накопленных в настоящее время недействительных областей, вызвав UpdateWindow
. Но, опять же, если вы не спешите, явный вызов UpdateWindow
не является необходимым, так как после того, как окно простаивает, оно автоматически выполнит перерисовку для всех в настоящее время недействительных областей.
RedrawWindow
, с другой стороны, является функцией с гораздо более широким и гибким набором возможностей. Он может использоваться для выполнения планирования аннулирования (то есть, то же самое, что делает InvalidateRect
) или может использоваться для принудительного немедленного перерисовки указанной области, без какого-либо «планирования». В последнем случае вызов RedrawWindow
практически эквивалентен вызову InvalidateRect
, а затем немедленному вызову UpdateWindow
.