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

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

Invalidate()之后:(MFC的,顺便了)
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调用之后的语句。

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

Invalidate()函数相关推荐

  1. InvalidateRect() 与 Invalidate()函数

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

  2. Invalidate函数

    void Invalidate( BOOL bErase = TRUE ); 参数: bErase 决定了是否要在WM_PAINT消息前发送WM_ERASEBKGND 该函数的作用是使整个窗口客户区无 ...

  3. MFC中的Invalidate、OnDraw、OnPaint函数的作用及绘图概念

    1.绘图概念 GDI绘图分为背景和前景两个画布的绘制,Invalidate()函数强制重绘制, Invalidate()     如果参数为true则在OnPaint函数对背景先进行绘制,再对前景进行 ...

  4. invalidate

    转载请注明出处:                前言: 本文是我读<Android内核剖析>第13章----View工作原理总结而成的,在此膜拜下作者 .同时真挚地向渴望了解      A ...

  5. 窗口刷新 Invalidate UpdateWindow RedrawWindow

    窗口刷新的几个函数:InvalidateUpdateWindowRedrawWindow 一:什么时候才会发生重绘窗口的消息?        当需要更新或重新绘制窗口的外观时,应用程序就会发送WM_P ...

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

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

  7. Invalidate() UpdateData() OnPaint()与OnDraw

    Invalidate()函数 UpdateData()用法 OnPaint()与OnDraw 收藏 vc++ MFC 2010-11-08 16:42:49 阅读208 评论0   字号:大中小 订阅 ...

  8. invalidate()

    该函数的作用是请求View树进行重绘,当应用程序需要重绘某个视图时,可以调用该函数. 绘 制流程中,首先绘制最底层的根视图,然后再绘制其包含的子视图.子视图或者是一个 VeiwGroup,或者是一个V ...

  9. C#中使用Invalidate()与MouseMove方法刷新控件时,控件闪烁问题解决方法

    1. 问题出现场景 当我们在使用C# 中的绘图功能时,如果需要动态改变控件UI的状态,比如绘制了一个圆,点击时填充圆颜色为绿色.那么我们必须使用Invalidate()函数进行刷新.运行程序之后会发现 ...

最新文章

  1. Pandas中Apply函数加速百倍的技巧
  2. python不能处理excel文件-别以为Python的pandas不能处理非规范Excel数据
  3. 转换到 COFF 期间失败: 文件无效或损坏 解决方法
  4. CSS一些有趣的东西
  5. Sonarqube 中文插件专栏
  6. 实现TeX的算法:回首编程技术的过去三十年
  7. c 语言生成json 文件,如何用c语言反序列化JSON文件#
  8. 有限元基础及ANSYS应用 - 第10节 - 实体结构的ANSYS分析
  9. Win 7 SSDP 组播 引发 局域网 QQ掉线 分析
  10. Java物流项目第一天 项目概述与基础数据服务开发
  11. [Unity]CutScene工具Cinema Suite Rotion 角度不能负数方向旋转的bug修正。
  12. 用于空间搜索的四叉树
  13. 没有计算器的日子怎么过——手动时期的计算工具
  14. 2022-2-13 转换函数(conversion function) non-explicit-one argument ctor explicit-one argument ctor
  15. 使用ccache大幅度加速gcc编译速度
  16. 网站SEO优化多少钱 网站seo优化费用多少
  17. c#调用TSC条码打印出现中文乱码
  18. stm32C8t6 通用定时器输出PWM+定时中断控制板载LED
  19. C#中在鼠标经过Button控件时显示提示信息(弹出气泡提示框)
  20. 【数据分析】基于matlab GUI学生成绩管理系统【含Matlab源码 1981期】

热门文章

  1. repmat()函数用法
  2. 牛客网sql练习笔记(二)
  3. 先验分布 后验分布 似然估计
  4. 如何停止Monkey测试
  5. 【基础篇】MySQL系列之where条件查询
  6. 双精度浮点数double
  7. 线段树模板(建树+更新)
  8. Keras Tuner自动调参工具使用入门教程
  9. C++ Primer Plus 编程练习3
  10. 基于javaweb的在线车队货车管理系统(java+ssm+jsp+bootstrap+mysql)