Mousemove自定义滚动条数学

时间:2018-03-26 14:43:45

标签: c# scrollbar mousemove

Scroll Bar

我正在构建一个Custom Scroll Bar(如上图所示)我能够将滚动条值设置为允许范围内的任何数字(Min和Max之间),但是当涉及到鼠标滚动时,我遇到了数学问题。

我希望鼠标保持在用户在拇指栏中单击的位置,然后向上或向下拖动拇指,以便滚动条的中间位置反映该值。

我有以下代码来休息拇指的中间位置:

Domain

此代码可以正常工作,APART从Thumb总是跳跃的事实,以便拇指的中间跟踪鼠标。

如何在不跳跃的情况下让拇指跟踪鼠标位置?

1 个答案:

答案 0 :(得分:0)

我失踪的部分是用户按下鼠标按钮开始拖动拇指的事实。此时,可以在拖动拇指的同时计算并使用拇指中间位置的偏移。在用户释放鼠标之前,此偏移量将保持不变。在整个事件序列中保持不变的事实,它可以在鼠标移动期间使用。

伪码:

MouseDownEvent(MouseEventArgs e) {
   m_mouseOffset = e.Y  - Thumb.Top + (ThumbLength / 2);
}

MouseMoveEvent(MouseEventArgs e) {
  int iPos = e.Y;
  iPos -= m_mouseOffset;
  m_iMidPoint= iPos;
}