用ScrollWindow函数处理WM_VSCROLL消息,在拖动滚动条的过程中一直有WM_PAINT消息产生,所以在拖动的过程中显示区域是不断刷新的;然而如果使用SetScrollPos和InvalidateRect处理的话就只在鼠标松开的时候才会有WM_PAINT消息。我想问,使用SetScrollPos和InvalidateRect处理的原理是怎样的,为什么会出现与ScrollWindow不同的效果,SetScrollPos能否实现即时刷新功能。还有,我是Windows7系统,装的VC6.0,自带的spy++不好用,运行的时候经常出现所有窗口一个接一个未响应的现象,不知道这样的情况是不是普遍的。滚动条ScrollWindowSetScrollPosUpdateWindow

解决方案 »

  1.   

    MSDN有说明:
    The area uncovered by ScrollWindow is not repainted, but it is combined into the window's update region. The application eventually receives a WM_PAINT message notifying it that the region must be repainted. To repaint the uncovered area at the same time the scrolling is in action, call the UpdateWindow function immediately after calling ScrollWindow. 
      

  2.   

    SetScrollPos只是修改滚动条。
    你用ScrollWindow用法可能有误。
    我一般这么用,有一个WS_VSCROLL样式窗口,在它上面创建子窗口,然后scroll这个样式窗口。
    而不是:有一个WS_VSCROLL样式窗口,直接Scroll这个窗口,这样会导致绘制的东西错位残留很严重。