简体   繁体   中英

what is invalidate,update methods do in VC++

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

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM