Invalidate函数的总结 - 也是界面刷新的总结(转载)

原创 2005年04月29日 13:22:00

InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生效

InvalidateRect函数中的参数TRUE表示系统会在你画之前用背景色将所选区域覆盖一次,默认背景色为白色,可以通过设置BRUSH来改变背景色。

Invalidate()之后:
...OnPaint()->OnPrepareDC()->OnDraw()
所以只是刷新在OnPaint()和OnDraw()函数中的绘图语句。其它地方没有影响。

Invalidate标记一个需要重绘的无效区域,并不意味着调用该函数后就立刻进行重绘。类似于PostMessage(WM_PAINT),需要处理到WM_PAINT消息时才真正重绘。以为您Invalidate之后还有其他的语句正在执行,程序没有机会去处理WM_PAINT消息,但当函数执行完毕后,消息处理才得以进行。

Invalidate只是放一个WM_PAINT消息在队列里,不做别的,所以只有当当前函数返回后,进入消息循环,取出WM_PAINT,才执行PAINT,所以不管Invalidate放哪里,都是最后的。

InvalidateRect(hWnd,&rect,TRUE);向hWnd窗体发出WM_PAINT的消息,强制客户区域重绘制,
rect是你指定要刷新的区域,此区域外的客户区域不被重绘,这样防止客户区域的一个局部的改动,而导致整个客户区域重绘而导致闪烁,如果最后的参数为TRUE,则还向窗体发送WM_ERASEBKGND消息,使背景重绘,当然在客户区域重绘之前。
UpdateWindow只向窗体发送WM_PAINT消息,在发送之前判断GetUpdateRect(hWnd,NULL,TRUE)看有无可绘制的客户区域,如果没有,则不发送WM_PAINT

如果希望立即刷新无效区域,可以在调用InvalidateRect之后调用UpdateWindow,如果客户区的任一部分无效,则UpdateWindow将导致Windows用WM_PAINT消息调用窗口过程(如果整个客户区有效,则不调用窗口过程)。这一WM_PAINT消息不进入消息队列,直接由WINDOWS调用窗口过程。窗口过程完成刷新以后立刻退出,WINDOWS将控制返回给程序中UpdateWindow调用之后的语句。(windows程序设计第5版 P98)

UpdateData()顺便说下,这个函数不是刷新界面用的。
UpdateData();参数为FALSE时,将界面上控件绑定的变量的数据导到控件内,参数为TRUE时,导入方向则相反。

Invalidate函数及WM_PAINT总结(推荐!)

InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生效 InvalidateRect函数中的参数TRUE表示系统会在你画之前用背景色将所选区域覆盖一次,默认背景色为白色,可...

Android之界面刷新 View更新 Invalidate和postInvalidate的区别

Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。  Android提供了In...
  • lqhed
  • lqhed
  • 2016年06月01日 14:44
  • 389

刷新界面:invalidate()和postInvalidate() 的区别及使用

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中...
  • dsa63
  • dsa63
  • 2014年09月17日 09:51
  • 1476

窗口刷新的几个函数:Invalidate UpdateWindow RedrawWindow

一:什么时候才会发生重绘窗口的消息?       当需要更新或重新绘制窗口的外观时,应用程序就会发送WM_PAINT消息。对窗口进行重新绘制。 二:Invalidate() -- Re...

hdu3018解题报告--也是白话几笔画学习总结

小白初次学习几笔画问题详细总结...结合图形..希望自己以后回头看能一目了然 也对刚刚接触的人有帮助..偶也...

项目失败经验总结,感觉生活中也是如此,蛮有道理

 什么原因导致那么多项目失败呢?通过总结大致分为13个方面的原因:    1.未正确定义问题   项目就是一个计划要解决的问题。如果没有很好的理解问题,那么我们就是在为一个错误的目的开发正确的...
  • c_c123
  • c_c123
  • 2015年05月08日 09:58
  • 301

给IT新人的15个建议,也是老程序员的反省和总结

很多人表面上看着老实巴交的,实际上内心比谁都好强、自负、虚荣、甚至阴险。工作中见的多了,也就习惯了。有一些人,什么事都写在脸上,表面上经常得罪人,甚至让人讨厌。但是他们所表现的又未必不是真性情。 我...

J2SE基础夯实系列之BigInteger使用总结(也是不可变的)

今天参考课本写了一个关于二进制与十进制转换的程序,程序算法不难,但写完后测试发现不论是二转十还是十转二,对于大于21亿即超过整数范围的数不能很好的转换。都会变成0. 参考书籍发现使用使用BigInt...

Invalidate()函数 .

转自:http://blog.csdn.net/yangsen2016/article/details/1618733 InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Invalidate函数的总结 - 也是界面刷新的总结(转载)
举报原因:
原因补充:

(最多只允许输入30个字)