UpdateWindow会检查窗口的Update Region,当其不为空时才发送WM_PAINT消息;RedrawWindow则给我们更多的控制:是否重画非客户区和背景,是否总是发送WM_PAINT消息而不管Update Region是否为空。

BeginPaint函数的作用就是将窗口需要重绘的区域设置为空(也就是Update Region置空)。在正常情况下,我们接收到了WM_PAINT消息后,窗口的Update Region都是非空的(如果为空就不需要发送WM_PAINT消息了)。而当你响应这个消息的时候又不调用BeginPaint来清空,窗口的Update Region就一直是非空的,系统就会一直发送WM_PAINT消息。这样就形成了一个处理WM_PAINT消息的死循环。

另外要注意的一点是,BeginPaint只能在WM_PAINT处理函数中使用,并且在调用了BeginPaint函数后,不要忘记了调用EndPaint函数,他们可是一对的。

重画函数 InvalidateRect,Invalidate,UpdateWindow, RedrawWindow

  InvalidateRect(部分区域) 和Invalidate(整个窗口)仅仅是用来设置无效区域,但是并不重绘窗口。

  UpdateWindow 检查窗口有无无效区域,如果有,则立即发送一个WM_PAINT 消息给窗口并立即重画。 

  RedrawWindow相当于先调用InvalidateRect,紧接着又调用UpdateWindow,此外RedrawWindow还提供了一些前两者没法做到的功能。

如果不调用 InvalidateRect就调用 UpdateWindow,那么UpdateWindow什么都不做,因为没有无效区域。如果调用 InvalidateRect 后不调用UpdateWindow,则系统会自动在窗口消息队列为空的时候,系统自动发送一WM_PAINT消息。

最新文章

  1. AlwaysOn添加高可用性自定义登陆用户的方法
  2. 设计算法,求AB两个整数集合的交集
  3. 搭建Tomcat6源代码阅读环境
  4. HDU1151Air Raid(二分图的最大匹配)
  5. cxf简单实例
  6. gdb在运行maintenance info program-spaces命令时coredump
  7. Hadoop分布式文件系统(HDFS)详解
  8. UVa11925 Generating Premutations
  9. OSG坐标系统
  10. JAVA的反射机制学习笔记(二)
  11. HDU 3571 N-dimensional Sphere(高斯消元 数论题)
  12. 这可能是新手最容易入门的JVM讲解(不过是一场恋爱)
  13. [转]SQL Server为啥使用了这么多内存?
  14. 微服务框架surging学习之路——序列化
  15. JS截取数字
  16. 前端性能优化 —— reflow(回流)和repaint(重绘)
  17. const_cast的用法与测试
  18. Hadoop记录-hadoop2.x常用端口及定义方法
  19. git clone 遇到的坑
  20. History API:ScrollRestoration

热门文章

  1. eclispe 出现超内纯错误
  2. 致vi老大 2011.1
  3. 应注意的Flex&Bison潜规则
  4. [Guava学习笔记]Collections: 不可变集合, 新集合类型
  5. HTML5之广播聊天室
  6. RHEL6.3 ftp服务器参数的戏说——不看白不看,看了不白看
  7. 【转】Qt使用自带的windeployqt 生成exe来发布软件
  8. android 数据存储的四种方式.
  9. ES6学习笔记(九)
  10. PHP实现冒泡算法