先看函数结构:

BOOL InvalidateRect(
HWND hWnd, // handle of window with changed update region
CONST RECT *lpRect, // address of rectangle coordinates
BOOL bErase // erase-background flag
);

参数说明:

1:hwnd:要更新的客户区所在的窗体的句柄。如果为NULL,则系统将在函数返回前重新绘制所有的窗口, 然后发送WM_ERASEBKGNDWM_NCPAINT 给窗口过程处理函数。

2:lpRect:无效区域的矩形代表,它是一个结构体指针,存放着矩形的大小。如果为NULL,全部的窗口客户区域将被增加到更新区域中。

3:bErase:参数bErase为TRUE表示系统会在你画之前用背景色将所选区域覆盖一次,默认背景色为白色,可以通过设置BRUSH来改变背景色;如果为FALE则保存现在的背景色,我认为这并不是说不对背景重绘,而是说用原来的背景色来重新绘背景,所以即便你调用了SetBkColor()也不会改变它的背景色,除非,你将此参数设为TRUE;

返回值:
函数成功则返回非零值,否则返回零值。

说明:

该函数的作用是让指定的RECT区域变为无效,并在系统的消息队列中放置WM_PAINT消息,但由于WM_PAINT消息的优先级很低,它需要等消息队列中的其它消息发送完后才能被处理。所以在调用invalidateRect()后并不会立即重绘,只能等到系统处理到它的或别人发的WM_PAINT消息时,才会被重绘;

如果想要立即重绘,调用UpdateWindow();

调用UpdateWindow函数可使WM_PAINT被直接发送到目标窗口,从而导致窗口立即重绘。其实发送的都是WM_PAINT消息,只不过是一个用的sendMessage()发的,一个是用PostMessage()发的。

对于WM_PAINT消息,我理解的处理过程如下:

在处理到WM_PAINT消息时,系统会将消息队列中所有的无效区域累加起来,一起重绘,然后丢弃所有的WM_PAINT消息。所以无论你发的WM_PAINT早还是晚,如果在处理到一个WM_PAINT消息时,它们都在队列中,就会将它们的无效区域累加起来,一起绘图。很明显,提高了效率!

invalidateRect解析相关推荐

  1. 一份超详细的IBM公司JAVA基础面试题附答案以及解析(题库)

    第一章 Java概述 笔试题 一.填空题 1.[基础题]Java是一种先 编译 后 解释 运行的语言. 二.选择题 三.名词解释 1.[基础题]J2SE:Java 2 Standard Edition ...

  2. golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用

    RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...

  3. List元素互换,List元素转换下标,Java Collections.swap()方法实例解析

    Java Collections.swap()方法解析 jdk源码: public static void swap(List<?> list, int i, int j) {// ins ...

  4. 条形码?二维码?生成、解析都在这里!

    二维码生成与解析 一.生成二维码 二.解析二维码 三.生成一维码 四.全部的代码 五.pom依赖 直接上代码: 一.生成二维码 public class demo {private static fi ...

  5. Go 学习笔记(82)— Go 第三方库之 viper(解析配置文件、热更新配置文件)

    1. viper 特点 viper 是一个完整的 Go应用程序的配置解决方案,它被设计为在应用程序中工作,并能处理所有类型的配置需求和格式.支持特性功能如下: 设置默认值 读取 JSON.TOML.Y ...

  6. Go 学习笔记(77)— Go 第三方库之 cronexpr(解析 crontab 表达式,定时任务)

    cronexpr 支持的比 Linux 自身的 crontab 更详细,可以精确到秒级别. ​ 1. 实现方式 cronexpr 表达式从前到后的顺序如下所示: 字段类型 是否为必须字段 允许的值 允 ...

  7. mybatis配置文件解析

    mybatis配置文件解析 mybatis核心配置文件`mybatis-config.xml文件. mybatis的配置文件包含了会深深影响mybatis行为的设置和属性信息. 能配置的内容: con ...

  8. 谷歌BERT预训练源码解析(二):模型构建

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_39470744/arti ...

  9. Python 标准库之 xml.etree.ElementTree xml解析

    Python 标准库之 xml.etree.ElementTree Python中有多种xml处理API,常用的有xml.dom.*模块.xml.sax.*模块.xml.parser.expat模块和 ...

最新文章

  1. 我和freelancer不得不说的故事5 --- 心理落差
  2. 不用ajax 后台的异步实现,js 怎么避免重复的异步操作(不问了,目前没办法后台做到,只能改造前端了)...
  3. SimCSE:用于句子嵌入的对比学习
  4. Understanding G1 GC Logs--转载
  5. 【opencv】1.opencv安装、编译、运行等踩坑记录
  6. c语言对分查找实验报告,C语言实验指导.doc
  7. 嵌入式设备带操作系统的启动过程
  8. 学地球物理的如何搞好软件开发
  9. myeclipse自定义java注释
  10. ssis oracle配置,[SSIS][Oracle]安裝 Oracle Driver 提供 SSIS 使用
  11. 【Excel自动化办公Part5】:设置行高和列宽、合并单元格、取消合并单元格
  12. 怎么缩小照片的kb?
  13. 【EM算法】小波域隐马尔科夫树模型参数的EM算法估计MATLAB仿真
  14. 未來用工新趨勢_2019年社会化用工成新趋势
  15. git name consists only of disallowed characters
  16. Linux C/C++开发的难度到底在哪?大厂岗位要求
  17. 解决在页面中无法获取qrcode.js生成的base64的图片
  18. 520谁才是你的真爱?
  19. 组合预测模型 | PSO-ELM、ELM极限学习机数据回归预测对比(Matlab程序)
  20. 学位计算机英语,学士的英文名单大全

热门文章

  1. 【英语语法入门】 第05讲 名词性_形容词性物主代词
  2. 博客写作技巧_35个管理和处理多作者博客的技巧
  3. centos 设置mtu_Linux系统下修改最大传输单元MTU的方法
  4. div通过position:fixed或者absolute固定位置后,a或者onclick失效问题解决
  5. proteus中导入ST7920驱动的LCD12864模型
  6. VistaPanel面板主机使用Cname解析域名并使用Cf免费CDN与SSL
  7. PhpStorm 配置在浏览器中打开PHP文件
  8. 华中农业大学 计算机考研,华中农业大学考研难吗?一般要什么水平才可以进入?...
  9. Java枚举类、注解和反射
  10. IntelliJ IDEA 安装使用教程以及激活码