什么是无效,更新方法在VC ++中做

时间:2010-02-02 11:32:09

标签: c++ mfc winapi windows-services visual-c++

我对c ++中的窗口函数有一点疑问。 究竟"invalidate()"函数到底是做什么的? 当我们需要调用它时,它发送了什么消息?什么是"update()"功能? "invalidaterect()"是否与"invalidate()"函数类似?

由于

2 个答案:

答案 0 :(得分:7)

CWnd::Invalidate()使窗口的整个客户区无效,表示该区域已过期,应重新绘制。您通常会在需要重绘的控件上调用它。 CWnd::InvalidateRect()仅使窗口的一部分无效。

使用Invalidate函数,WM_PAINT消息将发布[并非严格为真;查看消息队列中的注释]并在将来的某个时间处理。 CWnd::UpdateWindow()WM_PAINT邮件发送(而非帖子),导致无效区域立即重新绘制。

真的,这完全在文档中。

答案 1 :(得分:1)

invalidate函数将绘图区域标记为无效。重绘窗口时使用此标志,如果区域无效,则会重绘区域,否则只会保留屏幕区域。 invalidate使给定对象的整个客户区无效,invalidaterect使客户区的特定区域无效。更新功能执行实际重绘。

这种机制的原因,而不仅仅是当你知道必须改变的东西时立即绘制,是因为你可以防止多次重绘,例如你一次收到三条keydown消息,滚动一些文本区域。如果您为每个按键重新绘制文本区域,则必须将文本区域绘制三次,然后应用程序将无响应。通过改为处理所有关键事件,更新附加到文本区域的数据结构并在重绘textarea之前使文本区域无效,您只需重绘一次textarea。