请教MFC中窗口显示数据更新问题
在SDI窗口中,文档类负责加载、处理数据,视图类负责显示、更新窗口数据,
通常,会在视图类的成员函数中执行下列函数:
Invalidate();
UpdateWindow();
这两个函数的作用就是更新窗口的函数,我有如下问题不是很明白,请教一下高手们:
1) 我以上的理解对吗?如果不对,请高手们指教?
2) Invalidate();和UpdateWindow();函数更新的是什么对象?我的意思是,更新的是文档对象,还是窗口对象?
3) 在调用Invalidate();和UpdateWindow();函数的时候,程序是如何知道到底要将什么数据更新到窗口的上的?
我是菜鸟,刚开始学习MFC,请高手们不要拍我,敬请指教!
[解决办法]
Invalidate():
该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。视图类有一些例外,在视图类的OnPaint函数中调用了OnDraw函数,实际的重绘工作由OnDraw来完成。参数bErase为TRUE时,重绘区域内的背景 将被擦除,否则,背景将保持不变。
InvalidateRect():
该函数的功能与Invalidate基本一样,不同的是,它是使指定的某个区域无效,需要输入一个区域。
UpdateWindow():
UpdateWindow( )的作用是使窗口立即重绘。调用Invalidate等函数后窗口不会立即重绘,这是由于WM_PAINT消息的优先级很低,它需要等消息队列中的其它消息发送完后才能被处理。调用UpdateWindow函数可使WM_PAINT被直接发送到目标窗口,从而导致窗口立即重绘。