MFC之窗口控件更新重绘相关函数
来源:互联网 发布:无影无踪软件 编辑:程序博客网 时间:2024/05/18 02:40
在重绘窗口的过程中,有几个常用的函数,熟悉这些函数的作用对MFC编程有很大的好处。
- Invalidate。该函数的功能是使整个窗口客户区无效(意味着需要重绘),但并不意味着函数被调用后就会立即重绘,详见本文下述UpdateWindow函数作用。
- InvalidateRect。该函数功能等同于Invalidate,只是本函数只使一个Rect区域无效。
- UpdateData。我们常常把窗口控件和某个变量绑定到一起,我们希望修改变量值之后控件能更新显示,也希望获取变量时是控件更新后的值,这就是本函数的存在意义。
- UpdateData(TRUE); //用于将屏幕上控件中的数据赋值给成员变量,即从窗口编辑框中读入数据
- UpdateData(FALSE); //用于将成员变量的值赋值给控件,将数据从窗口显示
- UpdateWindow。使得窗口立即重绘(立即发送WM_PAINT而不用管优先级)。调用Invalidate等函数并不会立即重绘,因为WM_PAINT消息的优先级很低,需要等消息队列中的其他消息发送完才能被处理。调用本函数后可使WM_PAINT被直接发送到目标窗口,从而导致窗口被立即重绘。
1. UpdateWindow:如果有无效区,则马上sending a WM_PAINT message到窗口处理过程,不进消息队列进行排队等待,立即刷新窗口,否则,什么都不做。
2. InvalidateRect:设置无效区,如果为NULL参数,则设置整个窗口为无效区。当应用程序的那个窗口的消息队列为空时,则sending a WM_PAINT message(即使更新区域为空).在sending a WM_PAINT message的所有InvalidateRect的更新区域会累加。
3. 如果不调用 InvalidateRect就调用 UpdateWindow,那么UpdateWindow什么都不做。 ??????
4. 如果调用 InvalidateRect 后不调用UpdateWindow,则系统会自动在窗口消息队列为空的时候,系统自动发送一WM_PAINT消息。
5. 调用UpdateWindow()时将会发送一个WM_PAINT消息,而应用程序在接收到WM_PAINT消息后,将自动地调用Invalidate(),所以,在程序代码中,不一定要出现Invalidate()!
6. UpdateWindow()就是立即发送WM_PAINT消息,只对声明无效的区域起作用。Invalidate()则是声明无效的方式之一。
7. Invalidate()表示客户区域无效,在下次WM_PAINT发生时重绘。而WM_PAINT是由系统进行维护的,每当CWnd的更新区域不为空,并且在应用程序的窗口消息队列中没有其它消息时,Windows就发送一条WM_PAINT消息。
Invalidate里面有个bool型的参数,用来标识重绘的时候是否用背景色填充。
8. updateWindow则是要求系统对区域进行立即重绘。
看到有人在网上提出问题,他在Invalidate后面又写了绘图的函数但是没有执行,因为invalidate执行过以后转到PAINT命令了。所以后面的都没有显示。
也终于想通我绘的图一直在闪啊闪,因为我在PAINT里面用到Invalidate()函数,所以他不停的自嵌套,倒是绘的图不停的闪。
9. Invalidate让客户区处于可以重画的状态,而UpdateWindow开始重画,但是它先判断客户区是否为空,不空UpdateWindow不执行,为空才执行重画。
10.Invalidat最后也是调用InvalidatRect,在windows API里只有InvalidatRect的
- MFC之窗口控件更新重绘相关函数
- MFC重绘窗口函数
- MFC窗口重绘相关汇总
- MFC 窗口重绘
- MFC 窗口重绘
- mfc 窗口重绘
- MFC 窗口重绘
- 窗口重绘相关
- MFC重绘控件,坐标配置相关笔记
- MFC控件重绘
- MFC中窗口重绘
- MFC中窗口重绘
- MFC----窗口的重绘
- MFC中窗口重绘
- MFC中窗口重绘
- MFC的窗口重绘
- MFC中窗口重绘
- MFC 控件重绘(2) NM_CUSTOMDRAW, WM_DRAWITEM, 虚函数DrawItem
- maven依赖关系中Scope的作用
- 通过反编译深入理解Java String及intern
- PHP——AJAX 与 PHP
- Quake4之Fx
- android studio 修改应用版本号
- MFC之窗口控件更新重绘相关函数
- js原型与闭包 读书笔记
- centos7上dpdk编译安装
- 顺序环形队列的操作实现
- LaTeX 各种命令,符号
- UIActionSheet与HUD的window资源竞争
- Netty学习系列文章
- Python编程者共性错误
- 【转】Java 线程池学习