MFC中窗口刷新函数详解
来源:互联网 发布:简单的视频制作软件 编辑:程序博客网 时间:2024/05/16 03:29
按引:Invalidate在消息队列中加入一条WM_PAINT消息,其无效区为整个客户区。而UpdateWindow直接发送一个WM_PAINT消息,其无效区范围就是消息队列中WM_PAINT消息(最多只有一条)的无效区。效果很明显,调用Invalidate之后,屏幕不一定马上更新,因为WM_PAINT消息不一定在队列头部,而调用UpdateWindow会使WM_PAINT消息马上执行的,绕过了消息队列。如果你调用Invalidate之后想马上更新屏幕,那就加上UpdateWindow()这条语句。
UpdateData():
Invalidate():
InvalidateRect():
UpdateWindow():
UpdateWindow:如果有无效区,则马上sending a WM_PAINT message到窗口处理过程,不进消息队列进行排队等待,立即刷新窗口,否则,什么都不做。
InvalidateRect:设置无效区,如果为NULL参数,则设置整个窗口为无效区。当应用程序的那个窗口的消息队列为空时,则sending a WM_PAINT message(即使更新区域为空).在sending a WM_PAINT message的所有InvalidateRect的更新区域会累加。
1:设置无效区
InvalidateRect
2:立即刷新
UpdateWindow()
如果不调用 InvalidateRect就调用 UpdateWindow,那么UpdateWindow什么都不做。
调用UpdateWindow()时将会发送一个WM_PAINT消息,而应用程序在接收到WM_PAINT消息后,将自动地调用Invalidate()。所以,在程序代码中,不一定要出现Invalidate()!
UpdateWindow()就是立即发送WM_PAINT消息,updateWindow要求系统对区域进行立即重绘,其只对声明为无效的区域起作用,而Invalidate()是声明无效区域的方式之一。
Invalidate()表示客户区域无效,在下次WM_PAINT发生时重绘。而WM_PAINT是由系统进行维护的,每当CWnd的更新区域不为空,并且在应用程序的窗口消息队列中没有其它消息时,Windows就发送一条WM_PAINT消息。
Invalidat最后也是调用InvalidatRect。
RedrawWindow
*****************************************************************************************************************************************
看到有人在网上提出问题,他在Invalidate后面又写了绘图的函数但是没有执行,这是因为invalidate执行过以后就转到PAINT命令了,所以后面的都没有显示。
也终于想通我绘的图一直在闪啊闪,这是因为我在PAINT里面用到了Invalidate()函数,所以他不停的自嵌套,导致绘的图在不停的闪。
总之:Invalidate让客户区处于可以重画的状态,而UpdateWindow开始重画,但是它首先需判断客户区是否为空,不空则UpdateWindow不执行,为空才执行重画。
*********************************************************************************************************************************************
在刷新窗口时经常要调用重绘函数MFC提供了三个函数用于窗口重绘
OnDraw,一般是收到WM_PAINT消息时调用,所以应用程序一般通过Invalidate产生WM_PAINT消息来间接调用OnDraw。当窗体无效等情况下,window也会产生WM_PAINT消息,这时OnDraw
**********************************************************************************************************************
OnInitUpdate是VIEW的初始化
OnDraw和OnPaint都是绘图。OnPaint调用OnDraw,并且调用OnPrepareDC
- MFC中窗口刷新函数详解
- MFC中窗口刷新函数详解
- MFC中窗口刷新函数详解
- MFC中窗口美化函数
- MFC数据窗口更新函数详解
- UpdateData() 是MFC的窗口函数,用来刷新数据的。
- MFC 的窗口刷新接口
- c++窗口刷新函数
- MFC界面刷新函数
- VC/MFC中subclassdlgitem函数详解
- MFC中MessageBox函数用法详解
- MFC应用程序中窗口创建 销毁调用函数的顺序
- MFC中获取窗口句柄及相关函数
- MFC中获取窗口句柄指针及相关函数
- MFC中获取窗口句柄及相关函数
- MFC中获取窗口句柄及相关函数
- MFC:线程中更新窗口不能直接调用UpdateData函数
- MFC中获取窗口句柄及相关函数
- 【Vue】使用Rollup打包vue时出现process is not defined
- jsonp解决ajax跨域问题
- 自动将千以内的含4的数加一,其他不变。
- CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.13+博客系统WordPress3.3.2
- VS 2008 使用静态库的时候报错
- MFC中窗口刷新函数详解
- VMware中ubuntu忘记密码解决办法
- lesson6.6Hashtable使用
- LeetCode #17 Letter Combinations of a Phone Number
- C++ 中vector的使用方法
- 【JavaSE系列-入门篇3】——Java技术如何改变我的生活?
- 解决启动Tomcat时遇到INFO: Destroying ProtocolHandler ["ajp-apr-8009"]
- 细粒度图像识别Object-Part Attention Driven Discriminative Localization for Fine-grained Image Classificatio
- Ubuntu 16.04配置安装YouComPleteMe等插件