滚动条在WM_VSCROLL之后移回

jma*_*erx 3 c c++ winapi

我有一个自己的H和V滚动窗口.我正在处理这样的事件:

case WM_VSCROLL:

        SetScrollPos(hWnd, SB_VERT, (int)HIWORD(wParam), TRUE);

        break;
Run Code Online (Sandbox Code Playgroud)

所有我想要的是滚动条的位置,一旦我释放我的鼠标,但它正在做的只是回到顶部之后.我究竟做错了什么?

谢谢

And*_*and 10

wParam所述的参数WM_VSCROLL的消息要么是SB_TOP,SB_BOTTOM,SB_PAGEUP,SB_PAGEDOWN,SB_LINEUP,SB_LINEDOWN,SB_THUMBPOSITION,或SB_THUMBTRACK,其中,所述名称应该解释自己.

  • SB_TOP并且SB_BOTTOM表示滚动窗口分别位于顶部或底部.右键单击垂直滚动条并选择"顶部"和"底部"可以发送这些消息.(例如,在Windows记事本,Win XP +中查找.)

  • SB_PAGEUP并且SB_PAGEDOWN表示页面(屏幕)向上或向下.如果您单击拇指旁边的滚动条或向上或向下箭头上的somwhere,或者使用滚动条的右键单击菜单,则会发送这些内容.

  • SB_LINEUPSB_LINEDOWN在用户单击滚动条上的向上和向下按钮时发送,或选择相应的右键单击菜单命令.

  • SB_THUMBTRACK 当用户通过拖动滚动条的拇指滚动时,会连续发送.

  • SB_THUMBPOSITION 用户释放拇指时发送.

有关更多信息,请参阅MSDN文章WM_VSCROLL.

因此,当您收到WM_VSCROLL消息时,首先需要自己滚动.例如,如果您正在编写文本编辑器,则需要重绘文本,但窗口顶部有不同的行.然后,您需要将滚动条更新到其新位置,最好是通过SetScrollInfo,但您也可以使用旧的SetScrollPos函数.

  • 有关如何处理`WM_VSCROLL`消息的示例,请参见http://msdn.microsoft.com/en-us/library/bb787531(VS.85).aspx. (2认同)