c语言中invalid,invalidate函数的使用
void invalidate(BOOL bErase=TRUE);
该函数使整个窗口客户区无效。窗口的无效客户区意味着需要重新绘制。例如,如果被其他窗口覆盖的窗口成为前台窗口,则原来被覆盖的部分无效,需要重新绘制。Windows会将WM_PAINT消息放入应用程序的消息队列中。MFC窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责窗口的重绘。视图类有一些例外。OnDraw函数在view类的OnPaint函数中调用,实际的重画工作由OnDraw完成。当参数bErase为真时,重绘区域的背景将被擦除;否则背景不变。
UpdateWindow()和UpdateWindow()的区别在于,updatewindow()的作用是让窗口立即重绘。调用Invalidate等函数后,不会立即重绘窗口。这是因为WM_PAINT消息的优先级较低,它需要等待消息队列中的其他消息发送后才能被处理。调用UpdateWindow函数可以导致WM_PAINT被直接发送到目标窗口,这将导致窗口被立即重画。
不擦除背景直接作废(假)绘制。
Invalidate(true)擦除背景。
无效()函数的用法
不擦除背景直接作废(假)绘制。
Invalidate(true)擦除背景。
InvalidateRect只是增加了重绘区域,在下一个WM_PAINT时间生效。
InvalidateRect函数中的参数TRUE表示系统将在您绘制之前用背景色覆盖所选区域一次。默认背景色是白色,可以通过设置BRUSH来改变背景色。
invalid():(顺便说一下,MFC)之后
OnPaint()- OnPrepareDC()- OnDraw()
所以只要刷新OnPaint()和OnDraw()函数中的画图语句就可以了。其他地方没有影响。
Invalidate标记了一个需要重绘的无效区域,这并不意味着函数被调用后会立即重绘。类似于PostMessage(WM_PAINT),需要对其进行处理才能真正重绘WM_PAINT消息。你认为Invalidate之后还有其他语句正在执行,程序没有机会处理WM_PAINT消息,但是消息处理只能在函数执行之后进行。
Invalidate只是在队列中放一个WM_PAINT消息,其他不做,所以只有当前函数返回,进入消息循环,取出WM_PAINT,才会执行PAINT,所以无论Invalidate放在哪里,都是最后一个。
invalidate estrupter(hWnd,Rect,TRUE);向hWnd form发送WM_PAINT消息,强制重画客户区,
Rect是你指定刷新的区域,这个区域之外的客户区域不会被重画,以免客户区域的一个局部变化,导致整个客户区域被重画而闪烁。如果最后一个参数为真,那么WM_ERASEBKGND消息将被发送到表单来重绘背景,当然是在重绘客户区域之前。
UpdateWindow()只向窗体发送WM_PAINT消息。在发送之前,它判断GetUpdateRect(hWnd,NULL,TRUE)是否有要绘制的客户区。如果不是,它不发送WM_PAINT。
如果想立即刷新无效区域,可以在调用InvalidateRect后调用UpdateWindow。如果客户区的任何部分无效,UpdateWindow将导致Windows调用带有WM_PAINT消息的窗口过程(如果整个客户区有效,则不会调用窗口过程)。这个WM_PAINT消息不进入消息队列,窗口过程由WINDOWS直接调用。进程完成刷新后,窗口将立即退出,WINDOWS将在程序中UpdateWindow调用后将控制权返回给语句。
UpdateData()顺便说一下,这个函数不是用来刷新界面的。
update data();当参数为true时,接口上控件绑定的变量的数据将被导入到控件中;当参数为false时,导入方向将相反。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。