Функция invalidate помечает область рисования как недействительную. Этот флаг используется, когда окно перерисовывается, если область становится недействительной, она перерисовывает область, если нет, она просто покидает область экрана как есть. invalidate делает недействительной всю клиентскую область данного объекта, invalidaterect делает недействительной конкретную область клиентской области. Функция обновления выполняет фактическую перерисовку.
Причина такого механизма, а не просто рисования сразу, когда вы знаете, что что-то должно быть изменено, заключается в том, что вы можете предотвратить несколько перерисовок, скажем, например, вы получили три сообщения нажатия клавиш за один раз, прокручивая некоторую текстовую область. Если вы перерисовываете текстовую область для каждого из нажатий клавиш, вам придется рисовать текстовую область три раза, и приложение перестает отвечать на запросы. Вместо этого, обрабатывая все ключевые события, обновляя структуру данных, прикрепленную к текстовой области, и делая текстовую область недействительной перед перерисовкой текстовой области, вы перерисовываете текстовую область только один раз.