本文转载之:http://blog.sina.com.cn/s/blog_63393f440100nddq.html, 在此特感谢原作则的辛苦总结,非常好,转载此处,以便查阅。

BOOL InvalidateRect(HWND hWnd,           // 窗口句柄CONST RECT* lpRect,   // 矩形区域BOOL bErase            //是否擦除背景);

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

void Invalidate( BOOL bErase )执行之后调用函数的次序为:
…OnPaint()->OnPrepareDC()->OnDraw()
所以只是刷新在OnPaint()和OnDraw()函数中的绘图语句。其它地方没有影响。

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

Invalidate()只是放一个WM_PAINT消息在队列里,不做别的,所以只有当当前函数返回后,进入消息循环,取出WM_PAINT,才执行OnPaint(),所以不管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调用之后的语句。

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

InvalidateRect()与Invalidate()的用法(转)相关推荐

  1. InvalidateRect和Invalidate的区别

    Invalidate();   执行时,是先用背景刷清屏以后,再重新绘画 InvalidateRect(rect), 他执行时, rect区域以背景刷清屏,rect以外的区域不调用背景刷,而是将屏幕上 ...

  2. InvalidateRect() 与 Invalidate()函数

    ///===================该段是自己总结的一个小结================================= InvalidateRect()函数的作用是设置一个无效区域,并 ...

  3. MFC InvalidateRect和Invalidate

    BOOL InvalidateRect(HWND hWnd, // 窗口句柄CONST RECT* lpRect, // 矩形区域BOOL bErase //是否擦除背景);InvalidateRec ...

  4. 【转】VC窗口刷新InvalidateRect和UpdateWindow RedrawWindow

    首先说说WM_PAINT 这个重要的消息: The WM_PAINT message is generated by the system and should not be sent by an a ...

  5. VC窗口刷新InvalidateRect和…

    学习了 原文地址:VC窗口刷新InvalidateRect和UpdateWindow 作者:玩世不恭 首先说说WM_PAINT这个重要的消息: The WM_PAINT message is gene ...

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

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

  7. 如何设置窗口立即刷新显示

    一.引言 遇到一个问题: 清理缓存的时候,当缓存大于200M的时候,用户退出程序会显示一个对话框,这个对话框会提示用户清理缓存,当用户点击了"清理"按钮的时候,则会隐藏按钮并且提示 ...

  8. VC的MFC中重绘函数的使用总结(整理)

    原文网址:http://www.cnblogs.com/x8023z/archive/2008/12/09/mfc33.html 在刷新窗口时经常要调用重绘函数 MFC提供了三个函数用于窗口重绘 In ...

  9. vc项目开发:俄罗斯方块制作日志

    vc项目日志,俄罗斯方块开发                    ----July mfc初学一个月时,所写的俄罗斯方块.共享下源码. July.2010/10/21 --------------- ...

最新文章

  1. python皮同_Python OpenCV 图像的双线性插值算法,全网最细致的算法说明_橡皮擦,一个逗趣的互联网高级网虫-CSDN博客...
  2. 如何保证MySQL和Redis的数据一致性?
  3. R语言绘制环状条形图
  4. 公交车下发现一具男尸
  5. STM32的ISP升级详解
  6. 用 Flask 来写个轻博客
  7. 函数指针,指针函数,函数指针数组
  8. Node.js学习之(第二章:exports和module.exports)
  9. Tensor:索引操作
  10. IOS 地理编码以及反地理编码
  11. 【网络攻防技术】实验九——嗅探与欺骗实验
  12. iView组件+Django实现前后端分离上传图片
  13. 试卷模板 html,一年级语文试卷模板
  14. Flarum轻量级论坛的安装
  15. SQL查询语句多表联查、三表关联查询
  16. 再次写给我们这些浮躁的程序员
  17. 通过view实现实时监测数据的实时更新展示
  18. 荣刚:中国航信数据中心与灾备中心的运行
  19. dataframe建一个空的,pySpark创建空DataFrame
  20. 基于微博评论的细粒度的虚假信息识别软件

热门文章

  1. 分布式缓存数据库面试题redis
  2. 示例-AT示例-阿里云
  3. 计算机主机房的施工资质要求,请问建设机房改造资质有什么要求?
  4. C语言的求幂函数POW
  5. 《ZigBee开发笔记》第五部分 外设篇 - 基础实验 第3章 B- CC2530 MQ2 ADC读取烟雾浓度数值
  6. 单例设计模式实现总结
  7. CLRS 5.3随机算法
  8. python gui 显示表格_python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例...
  9. 【JAVA】作战命令
  10. 王子的烦恼(c++)