我对c ++中的窗口函数有一点疑问。
究竟"invalidate()"
函数到底是做什么的?
当我们需要调用它时,它发送了什么消息?什么是"update()"
功能?
"invalidaterect()"
是否与"invalidate()"
函数类似?
由于
答案 0 :(得分:7)
CWnd::Invalidate()
使窗口的整个客户区无效,表示该区域已过期,应重新绘制。您通常会在需要重绘的控件上调用它。 CWnd::InvalidateRect()
仅使窗口的一部分无效。
使用Invalidate
函数,WM_PAINT
消息将发布[并非严格为真;查看消息队列中的注释]并在将来的某个时间处理。 CWnd::UpdateWindow()
向WM_PAINT
邮件发送(而非帖子),导致无效区域立即重新绘制。
真的,这完全在文档中。
答案 1 :(得分:1)
invalidate函数将绘图区域标记为无效。重绘窗口时使用此标志,如果区域无效,则会重绘区域,否则只会保留屏幕区域。 invalidate使给定对象的整个客户区无效,invalidaterect使客户区的特定区域无效。更新功能执行实际重绘。
这种机制的原因,而不仅仅是当你知道必须改变的东西时立即绘制,是因为你可以防止多次重绘,例如你一次收到三条keydown消息,滚动一些文本区域。如果您为每个按键重新绘制文本区域,则必须将文本区域绘制三次,然后应用程序将无响应。通过改为处理所有关键事件,更新附加到文本区域的数据结构并在重绘textarea之前使文本区域无效,您只需重绘一次textarea。