mfc的Invalidate和UpdateWindow区别?我想立即重绘用哪个?

如题所述

第1个回答  推荐于2016-04-20
Invalidate在消息队列中加入一条WM_PAINT消息,其无效区为整个客户区。而UpdateWindow直接发送一个WM_PAINT消息,其无效区范围就是消息队列中WM_PAINT消息(最多只有一条)的无效区。效果很明显,调用Invalidate之后,屏幕不一定马上更新,因为WM_PAINT消息不一定在队列头部,而调用UpdateWindow会使WM_PAINT消息马上执行的,绕过了消息队列。如果你调用Invalidate之后想马上更新屏幕,那就加上UpdateWindow()这条语句。

一般来说,很少用到“立即重绘”,还是让窗口符合消息机制比较好。如果希望立刻,就是Invalidate之后再UpdateWindow,也就是两个都要调用。本回答被提问者采纳

mfc的Invalidate和UpdateWindow区别?我想立即重绘用哪个?
一般来说,很少用到“立即重绘”,还是让窗口符合消息机制比较好。如果希望立刻,就是Invalidate之后再UpdateWindow,也就是两个都要调用。

Invalidate与UpdateWindow( )的区别
在Windows图形用户界面编程中,`UpdateWindow()`和`Invalidate()`这两个函数在处理窗口重绘方面有着不同的职责。`UpdateWindow()`的主要作用是触发一个即时的窗口重绘请求。当你调用`UpdateWindow()`,它会直接发送一个WM_PAINT消息到目标窗口,这意味着窗口会立即进行重绘,即使在消息队列中还有其他消息等待...

MFC中的Invalidate、OnDraw、OnPaint函数的作用、区别和联系是什么?
UpdateWindow( )的作用是使窗口立即重绘。调用Invalidate等函数后窗口不会立即重绘,这是由于WM_PAINT消息的优先级很低,它需要等消息队列中的其它消息发送完后才能被处理。调用UpdateWindow函数可使WM_PAINT被直接发送到目标窗口,从而导致窗口立即重绘。OnPaint是WM_PAINT消息的消息处理函数,在OnPaint中调用O...

mfc的一些疑问
Invalidate()该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,调用Invalidate等函数后窗口不会立即重绘,这是由于WM_PAINT消息的优先级很低,它需要等消息队列中的其它消息发送完后才能被处理。如果要立即重画,用UpdateWindow( ).调用UpdateWindow函数可使WM_PAINT被直接发送到目标窗口,...

VC中 InvalidateRect,RedrawWindow和UpdateWindow的区别
RedrawWindow()则是具有Invalidate()和UpdateWindow()的双特性。声明窗口的状态为无效,并立即更新窗口,立即调用WM_PAINT消息处理。InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生效 InvalidateRect函数中的参数TRUE表示系统会在你画之前用背景色将所选区域覆盖一次,默认背景色为白色,可以通过设置...

MFC中的invalidate函数是什么意思啊?
Invalidate函数是强制系统进行重画,但是不一定就马上进行重画。因为Invalidate()只是通知系统,此 时的窗口已经变为无效。强制系统调用WM_PAINT,而这个消息只是Post就是将该消息放入消息队列。当执行到WM_PAINT消息时才会对敞口进行重绘。类似的还有下面的两个函数:UpdateWindow()只向窗体发送WM_PAINT消息,...

C# 中Invalidate()的作用
nvalidate()函数的作用是使整个窗口客户区无效,窗口客户无效即需要重绘,这时Window系统会发送一WM_PAINT消息放在应用程序的消息队列中,WM_PAINT消息的优先级很低,所以不会立即重绘。如果需要立即重绘,那么就使用UpdateWindow( )函数,该函数可使WM_PAINT被直接发送到目标窗口,从而导致窗口立即重绘。

...为何最大化后会成图示样子,有调用Invalidate()函数啊!
UpdateWindow()只向窗体发送WM_PAINT消息,在发送之前判断GetUpdateRect(hWnd,NULL,TRUE)看有无可绘制的客户区域,如果没有,则不发送WM_PAINT 如果希望立即刷新无效区域,可以在调用InvalidateRect之后调用UpdateWindow,如果客户区的任一部分无效,则UpdateWindow将导致Windows用WM_PAINT消息调用窗口过程(如果...

MFC子窗口怎样擦出背景
在主窗口中使用InvalidRect和UpdateWindow立即重绘子窗口需要重新绘制的区域(或者直接使用子窗口的RedrawWindow)就会调用子窗口的绘制代码或者擦除背景的代码。我最近也在自学控件的自绘,就献丑了,互相交流哈...

mfc中如何解决屏幕闪烁
在MFC中经常遇到屏幕刷新的问题,下面是几种解决方法。 1,刷新整个程序区域,有明显的闪烁情况Invalidate( TRUE );UpdateWindow(); 2,刷新指定区域,该区域有闪烁情况,不过比上一种方法要好多了。InvalidateRect( &m_rect, TRUE 0);UpdateWindow(); 3,还有一种方法 InvalidateRect( &m_rect, ...

相似回答