Invalidate与UpdateWindow的区别

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Invalidate()与UpdateWindow()的区别:voidInvalidate(BOOLbErase=TRUE);该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。视图类有一些例外,在视图类的OnPaint函数中调用了OnDraw函数,实际的重绘工作由OnDraw来完成。参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。BOOLUpdateWindow(HWNDhWnd);这个UpdateWindow函数通过发送重绘消息WM_PAINT给目标窗体来更新目标窗体客户区的无效区域。如果那个窗体的无效区域没有,就不发送重绘消息WM_PAINT了。注意了,这个API函数是直接发送消息WM_PAINT给目标窗体的,没有进入过消息队列。函数参数:hWnd一个要更新的窗体的句柄函数返回值:如果函数调用成功,返回值为非零值。如果函数调用不成功,返回值为零。在WindowsNT/2000/XP中,我们可以使用API函数GetLastError来得到扩展的错误信息。使用要求:WindowsNT/2000/XP:包括WindowsNT3.1及以后版本。Windows95/98/Me:包括Windows95及以后版本。需要的头文件:需要包含Windows.h,在Winuser.h中声明了此函数。需要的库文件:UseUser32.lib。Invalidate()与UpdateAllViews()的分别:Invalidate()和UpdateWindow()区别在于:UpdateWindow()的作用是使窗口立即重绘。调用Invalidate等函数后窗口不会立即重绘,这是由于WM_PAINT消息的优先级很低,它需要等消息队列中的其它消息发送完后才能被处理。调用UpdateWindow函数可使WM_PAINT被直接发送到目标窗口(窗口过程函数),从而导致窗口立即重绘。Invalidate()是让程序重画窗口。UpdateAllViews()是在DOC/VIEW结构中,当一个视图的数据改变后,通知所有视图作相应的改变,和重画毫无关系。Invalidate()是使窗口无效,使系统向其发WM_PAINT消息,使的程序的OnPaint被调用重画客户区。而UpdateAllViews()是文档与视之间的联系,调用从它会使程序与此文档相关的所有视的UpdateView被调用至于是否重画以及怎么画是由各视的UpdateView来决定的。Invalidate()是Cwnd的成员函数,与DOC-VIEW无关;UpdateAllViews是CDocument的成员函数,具体体现DOC-VIEW的精神。如果仅重画当前窗口用this-Invalidate();如果通知所有和当前文档相关的窗口重画用GetDocument()-UpdateAllViews()(在View中)或this-UpdateAllViews()(在Doc中)。Invalidate()函数产生一条WM_PAINT消息,并送入windows消息队列中,是窗口产生重画。而,UpdateAllViews并不进入windows消息队列中,直接产生重画Invalidate/RedrawWindow/UpdateWindow(zz)有什么分别一:什么时候才会发生重绘窗口的消息?当需要更新或重新绘制窗口的外观时,应用程序就会发送WM_PAINT消息。对窗口进行重新绘制。二:Invalidate()--RedrawWindow()--UpdateWindow()三个函数有什么异同?Invalidate()是强制系统进行重画,但是不一定就马上进行重画。因为Invalidate()只是通知系统,此时的窗口已经变为无效。强制系统调用WM_PAINT,而这个消息只是Post(寄送)就是将该消息放入消息队列。当执行到WM_PAINT消息时才会对敞口进行重绘。UpdateWindow只向窗体发送WM_PAINT消息,在发送之前判断GetUpdateRect(hWnd,NULL,TRUE)看有无可绘制的客户区域,如果没有,则不发送WM_PAINT。发送即不经过消息队列,直接发送到对应窗口,因此此函数可以立即更新窗口。RedrawWindow()则是具有Invalidate()和UpdateWindow()的双特性。声明窗口的状态为无效,并立即更新窗口,立即调用WM_PAINT消息处理。

1 / 2
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功