InvalidateRect()与Invalidate()的用法(转)
本文转载之: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()的用法(转)相关推荐
- InvalidateRect和Invalidate的区别
Invalidate(); 执行时,是先用背景刷清屏以后,再重新绘画 InvalidateRect(rect), 他执行时, rect区域以背景刷清屏,rect以外的区域不调用背景刷,而是将屏幕上 ...
- InvalidateRect() 与 Invalidate()函数
///===================该段是自己总结的一个小结================================= InvalidateRect()函数的作用是设置一个无效区域,并 ...
- MFC InvalidateRect和Invalidate
BOOL InvalidateRect(HWND hWnd, // 窗口句柄CONST RECT* lpRect, // 矩形区域BOOL bErase //是否擦除背景);InvalidateRec ...
- 【转】VC窗口刷新InvalidateRect和UpdateWindow RedrawWindow
首先说说WM_PAINT 这个重要的消息: The WM_PAINT message is generated by the system and should not be sent by an a ...
- VC窗口刷新InvalidateRect和…
学习了 原文地址:VC窗口刷新InvalidateRect和UpdateWindow 作者:玩世不恭 首先说说WM_PAINT这个重要的消息: The WM_PAINT message is gene ...
- InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生效
InvalidateRect函数中的参数TRUE表示系统会在你画之前用背景色将所选区域覆盖一次,默认背景色为白色,可以通过设置BRUSH来改变背景色. Invalidate()之后: ...OnPai ...
- 如何设置窗口立即刷新显示
一.引言 遇到一个问题: 清理缓存的时候,当缓存大于200M的时候,用户退出程序会显示一个对话框,这个对话框会提示用户清理缓存,当用户点击了"清理"按钮的时候,则会隐藏按钮并且提示 ...
- VC的MFC中重绘函数的使用总结(整理)
原文网址:http://www.cnblogs.com/x8023z/archive/2008/12/09/mfc33.html 在刷新窗口时经常要调用重绘函数 MFC提供了三个函数用于窗口重绘 In ...
- vc项目开发:俄罗斯方块制作日志
vc项目日志,俄罗斯方块开发 ----July mfc初学一个月时,所写的俄罗斯方块.共享下源码. July.2010/10/21 --------------- ...
最新文章
- python皮同_Python OpenCV 图像的双线性插值算法,全网最细致的算法说明_橡皮擦,一个逗趣的互联网高级网虫-CSDN博客...
- 如何保证MySQL和Redis的数据一致性?
- R语言绘制环状条形图
- 公交车下发现一具男尸
- STM32的ISP升级详解
- 用 Flask 来写个轻博客
- 函数指针,指针函数,函数指针数组
- Node.js学习之(第二章:exports和module.exports)
- Tensor:索引操作
- IOS 地理编码以及反地理编码
- 【网络攻防技术】实验九——嗅探与欺骗实验
- iView组件+Django实现前后端分离上传图片
- 试卷模板 html,一年级语文试卷模板
- Flarum轻量级论坛的安装
- SQL查询语句多表联查、三表关联查询
- 再次写给我们这些浮躁的程序员
- 通过view实现实时监测数据的实时更新展示
- 荣刚:中国航信数据中心与灾备中心的运行
- dataframe建一个空的,pySpark创建空DataFrame
- 基于微博评论的细粒度的虚假信息识别软件
热门文章
- 分布式缓存数据库面试题redis
- 示例-AT示例-阿里云
- 计算机主机房的施工资质要求,请问建设机房改造资质有什么要求?
- C语言的求幂函数POW
- 《ZigBee开发笔记》第五部分 外设篇 - 基础实验 第3章 B- CC2530 MQ2 ADC读取烟雾浓度数值
- 单例设计模式实现总结
- CLRS 5.3随机算法
- python gui 显示表格_python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例...
- 【JAVA】作战命令
- 王子的烦恼(c++)