按引:Invalidate在动静行列队伍中插手一条WM_PAINT动静,其无效区为整个客户区。而UpdateWindow直接发送一个WM_PAINT动静,其无效区范畴就是动静行列队伍中WM_PAINT动静(最多只有一条)的无效区。效果很明显,挪用Invalidate之后,屏幕不必然顿时更新,因为WM_PAINT动静不必然在行列队伍头部,而挪用UpdateWindow会使WM_PAINT动静顿时执行的,绕过了动静行列队伍。如果你挪用Invalidate之后想顿时更新屏幕,那就加上UpdateWindow()这条语句。
UpdateData():
当你使用了ClassWizard成立了控件和变量之间的联系后:当你改削了变量的值,而但愿对话框控件更新显示,就应该在改削变量后挪用UpdateData(FALSE);如果你但愿知道用户在对话框中到底输入了什么,就应该在访谒变量前挪用UpdateData(TRUE),将控件的输入映射到变量中。
Invalidate():
该函数的感化是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘。例如,如果一个被其它窗口遮住的窗口酿成了前台窗口,那么本来被遮住的部分就是无效的,需要重绘。这时Windows会在应用措施的动静行列队伍中安排WM_PAINT动静。MFC为窗口类供给了WM_PAINT的动静措置惩罚惩罚函数OnPaint,OnPaint卖力重绘窗口。视图类有一些例外,在视图类的OnPaint函数中挪用了OnDraw函数,实际的重绘事情由OnDraw来完成。参数bErase为TRUE时,重绘区域内的配景将被擦除,否则,配景将连结不乱。
InvalidateRect():
该函数的成果与Invalidate根基一样,差此外是,它是使指定的某个区域无效,需要输入一个区域,如果参数为NULL,则设置整个窗口为无效区。
UpdateWindow():
UpdateWindow( )的感化是使窗口当即重绘。挪用Invalidate等函数后窗口不会当即重绘,这是由于WM_PAINT动静的优先级很低,它需要等动静行列队伍中的其它动静发送完后才华被措置惩罚惩罚。挪用UpdateWindow函数可使WM_PAINT被直接发送到方针窗口,从而导致窗口当即重绘。
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什么都不做。 如果挪用 InvalidateRect 后不挪用UpdateWindow,则系统会自动在窗口动静行列队伍为空的时候,系统自动发送一WM_PAINT动静。
挪用UpdateWindow()时将会发送一个WM_PAINT动静,而应用措施在接收到WM_PAINT动静后,将自动地挪用Invalidate()。所以,在措施代码中,不必然要呈现Invalidate()!
UpdateWindow()就是当即发送WM_PAINT动静,updateWindow要求系统对区域进行当即重绘,其只对声明为无效的区域起感化,而Invalidate()是声明无效区域的方法之一。
Invalidate()暗示客户区域无效,不才次WM_PAINT产生时重绘。而WM_PAINT是由系统进行维护的,每当CWnd的更新区域不为空,并且在应用措施的窗口动静行列队伍中没有其它动静时,Windows就发送一条WM_PAINT动静。
Invalidat最后也是挪用InvalidatRect。
RedrawWindow 强制刷新,会挪用WM_PAINT,但如果你强制刷新的部分不存在就不会挪用WM_PAINT。若不带任何参数,则本窗口全部刷新。
*****************************************************************************************************************************************
看到有人在网上提出问题,他在Invalidate后面又写了绘图的函数但是没有执行,这是因为invalidate执行过以后就转到PAINT命令了,所以后面的都没有显示。
也终于想通我绘的图一直在闪啊闪,这是因为我在PAINT里面用到了Invalidate()函数,所以他不竭的自嵌套,导致绘的图在不竭的闪。