what is invalidate,update methods do in VC++

て烟熏妆下的殇ゞ 提交于 2019-11-30 05:41:45

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!