前面说过,我们一开始不想弄得太复杂,这样的程式码很浪费,效率很低。下面我们对此加以修改,但是先要考虑在WM_VSCROLL讯息之後更新显示区域的方法。
在处理完卷动列讯息後,SYSMETS2不更新显示区域,相反,它呼叫InvalidateRect使显示区域失效。这导致Windows将一个WM_PAINT讯息放入讯息伫列中。
最好能使Windows程式在回应WM_PAINT讯息时完成所有的显示区域绘制功能。因为程式必须在一接收到WM_PAINT讯息时就更新整个显示区域,如果在程式的其他部分也绘制的话,将很可能使程式码重复。
如同SYSMETS2示范的,程式仍然需要在处理非WM_PAINT讯息时更新特定的显示区域,使用InvalidateRect就很方便,您可以用它使显示区域内的特定矩形或者整个显示区域失效。