InvalidateRect(...)
在刷新的时候先发出WM_PAINT消息在根据参数
来确定刷新区域
如果参数为 NULL 就刷新整个区域

解决方案 »

  1.   

    要刷新,就需要WM_PAINT消息,这样理解的话,InvalidateRect会发出WM_PAINT消息就很正常了。
    而刷新的区域大小,就由参数进行限制了,避免了大部分情况下的全屏刷新,以免造成闪烁。
      

  2.   

    InvalidateRect不会发出WM_PAINT消息。这个函数的功能,是将一个矩形添加到目标窗口的更新区域中。而当一个窗口的消息队列空闲,同时窗口的更新区域不是空的话,系统就像这个窗口发送一个WM_PAINT消息。这里面的区别是:
    如果多次调用InvalidateRect,更新区域可能会合并。
    如果调用InvalidateRect之后又调用ValidateRect,可以将矩形从更新区域中去除,因此,可能就没有后续的WM_PAINT消息了。
    如果要在InvalidateRect之后马上刷新窗口,那就需要调用UpdateWindow,显然这样降低了绘图效率。另外,InvalidateRect矩形指针为NULL的话,窗口的更新区域为整个客户区而不是空。