MFC中Invalidate(); 和UpdateWindow();的用法

原创 2014年03月09日 19:54:18

1.

Invalidate()是强制系统进行重画,但是不一定就马上进行重画。因为Invalidate()只是通知系统,此 时的窗口已经变为无效。强制系统调用WM_PAINT,而这个消息只是Post就是将该消息放入消息队列。当执行到WM_PAINT消息时才会对敞口进行重绘;
UpdateWindow只向窗体发送WM_PAINT消息,在发送之前判断GetUpdateRect(hWnd,NULL,TRUE)看有无可绘制的客户区域,如果没有,则不发送WM_PAINT;
当调用Invalidate之后,屏幕不一定马上更新,因为WM_PAINT消息不一定在队列头部,而调用UpdateWindow会使WM_PAINT消息马上执行的,绕过了消息队列;
如果调用Invalidate之后想马上更新屏幕,那就加上UpdateWindow()这条语句


2.

和楼上差不多:Invalidate()使窗口客户区无效,并向消息队列中寄送一个WM_PAINT消息,假如此时消息队列中没有要处理的其他消息,则此时窗口立即会重绘(因为WM_PAINT会立即得到处理),如果消息队列中有其他消息,那么WM_PAINT就排队等呗。。。。这样就可能会存在一个不能即时刷新窗口的问题;
UpdateWindow()绕过消息队列(不进队),直接向窗口客户区发送WM_PAINT消息,使得窗口立即更新。


3.

单独的Invalidate(); 在窗口要重绘时用
和Invalidate();UpdateWindow();通常在程序开始时用



4.要注意UpdateWindow()和 UpdateData()的区别

UpdateData()一般是更新编辑框中的数据,

UpdateWindow()是更新整个窗口。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

MFC点点滴滴——Invalidate/InvalidateRect/UpdateWindow

一、Invalidate介绍   void Invalidate( BOOL bErase = TRUE );   该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个...
  • zhd320
  • zhd320
  • 2011-09-17 13:00
  • 1023

窗口刷新的几个函数:Invalidate UpdateWindow RedrawWindow

一:什么时候才会发生重绘窗口的消息?       当需要更新或重新绘制窗口的外观时,应用程序就会发送WM_PAINT消息。对窗口进行重新绘制。 二:Invalidate() -- Re...

关于Invalidate、InvalidateRect和UpdateWindow

(1)Invalidate        Invalidate标记一个需要重绘的无效区域,并不意味着调用该函数后就立刻进行重绘。类似于PostMessage(WM_PAINT),需要处理到WM_PA...

Invalidate和UpdateWindow的区别

在编程的时候经常把UpdateData、Invalidate、InvalidateRect和UpdateWindow四个函数混淆,在这里将简单介绍它们的区别。UpdateData():    当你使用...

InvalidateRect,invalidate,updatewindow

InvalidateRect(HWND) 使窗口无效 产生消息WM_PAINT;  ValidateRect(HWND)使窗口有效 清除消息队列中的WM_PAINT消息 在编程的时候经常把Up...

Invalidate和UpdateWindow的区别

Invalidate和UpdateWindow的区别 Invalidate在消息队列中加入一条WM_PAINT消息,其无效区为整个客户区。 UpdateWindow直接发送一个WM...

关于Invalidate、InvalidateRect和UpdateWindow

(1)Invalidate        Invalidate标记一个需要重绘的无效区域,并不意味着调用该函数后就立刻进行重绘。类似于PostMessage(WM_PAINT),需要处理到WM_...

关于Invalidate、InvalidateRect和UpdateWindow

关于Invalidate、InvalidateRect和UpdateWindow (1)Invalidate        Invalidate标记一个需要重绘的无效区域,并不意味着调用该...

Invalidate()、InvalidateRect()、InvalidateRgn、UpdateWindow()

1、Invalidate()使整个客户区无效。客户区无效则会发送WM_PAINT消息对整个客户区进行重绘。如果消息队列非空则Invalidate()不会立即发送WM_PAINT消息重绘窗口,直到消息队...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)