Invalidate()与UpdateWindow()的区别:
void Invalidate( BOOL bErase = TRUE );
该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。视图类有一些例外,在视图类的OnPaint函数中调用了OnDraw函数,实际的重绘工作由OnDraw来完成。
参数
转速和进给参数表a氧化沟运行参数高温蒸汽处理医疗废物pid参数自整定算法口腔医院集中消毒供应
bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。
BOOL UpdateWindow(HWND hWnd);
这个UpdateWindow 函数通过发送重绘消息WM_PAINT 给目标窗体来更新目标窗体客户区的无效区域。如果那个窗体的无效区域没有,就不发送重绘消息WM_PAINT 了。注意了,这个API 函数是直接发送消息WM_PAINT 给目标窗体的,没有进入过消息队列。
函数参数:
hWnd 一个要更新的窗体的句柄
函数返回值:
如果函数调用成功,返回值为非零值。
如果函数调用不成功,返回值为零。
在Windows NT/2000/XP中,我们可以使用API 函数GetLastError 来得到扩展的错误信息。
使用要求:
Windows NT/2000/XP:包括Windows NT 3.1 及以后版本。
Windows 95/98/Me:包括Windows 95 及以后版本。
需要的头文件:需要包含Windows.h,在Winuser.h 中声明了此函数。
需要的库文件: Use User32.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消息队列中,直接产生重画