就应该在修改变量后调用UpdateData(FALSE);如果你希望知道用户在对话框中到底输入了什么

时间:2021-08-11 08:07:11

按引: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()函数,所以他不竭的自嵌套,导致绘的图在不竭的闪。