what is invalidate,update methods do in VC++

14,590

Solution 1

CWnd::Invalidate() invalidates the entire client area of a window, which indicates that the area is out of date, and should be repainted. You would typically call this on a control that needs to be redrawn. CWnd::InvalidateRect() invalidates only part of the window.

With the Invalidate functions, the WM_PAINT message will posted [not strictly true; see the comments] to the message queue and handled at some point in the future. CWnd::UpdateWindow() sends (as opposed to posts) a WM_PAINT message, causing the invalidated regions to be redrawn immediately.

Really, this is all in the docs.

Solution 2

The invalidate function marks the drawing area as invalidated. This flag is used when the window is redrawn, if the area is invalidated it will redraw the area, if not it will just leave the screen area as it is. invalidate invalidates the whole client area of a given object, invalidaterect invalidates a specific region of the client area. The update function does the actual redraw.

The reason for such a mechanism, and not just drawing immediately when you know something has to be changed is that you can prevent multiple redraws, say for example you received three keydown messages in one go, which scroll some text area. If you redrew the text area for each of the key presses you would have to draw the text area three times and the application would become unresponsive. By instead processing all the key events, updating the data structure attached to the text area and invalidating the text area before you redraw the textarea, you only redraw the textarea once.

Share:
14,590
Naruto
Author by

Naruto

Updated on June 09, 2022

Comments

  • Naruto
    Naruto almost 2 years

    i have small doubt regarding the window functions in c++. what exactly "invalidate()" function do? what message does it sends?when we need to call this? also what is "update()" function? is "invalidaterect()" works similar to "invalidate()" function?.

    Thanks