【发布时间】:2018-04-18 16:43:32
【问题描述】:
我目前正在构建一个自定义滚动条(如上图所示),我可以将滚动条值设置为允许范围内的任何数字(在最小值和最大值之间),但是当涉及到鼠标滚动时,我遇到了数学问题。
我希望鼠标停留在用户点击拇指条的位置,然后向上或向下拖动拇指,使滚动条的中间位置反映该值。
我有以下代码来休息拇指的中间位置:
MoveThumb()
{
m_iMidPoint = Mouse.Cursor.Y;
int iHalfThumb = ThumbLength / 2;
m_iMidPoint += iHalfThumb;
// Clamp to allowable range
m_iMidPoint = m_iMidPoint < (TrenchStartPixel + iHalfThumb)
? TrenchStartPixel + iHalfThumb
: m_iMidPoint;
m_iMidPoint = m_iMidPoint > (TrenchEndPixel - iHalfThumb)
? TrenchEndPixel - iHalfThumb
: m_iMidPoint;
Value = MidThumbToValue(m_iMidPoint); // This property gets clamped
}
public int ConvertRange( int originalStart, int originalEnd, int newStart,
int newEnd, int value)
{
double scale = (double)(newEnd - newStart) / (originalEnd - originalStart);
return (int)(newStart + ((value - originalStart) * scale));
}
public int ValueToMidThumb(int iValue)
{
return ConvertRange(Minimum, Maximum, TrenchStartPixel + (ThumbLength/2),
TrenchEndPixel - (ThumbLength/2), iValue);
}
public int MidThumbToValue(int iValue)
{
return ConvertRange(TrenchStartPixel + (ThumbLength /2),
TrenchEndPixel - (ThumbLength /2), Minimum, Maximum, iValue);
}
这段代码工作正常,除了拇指总是跳跃以便拇指的中间跟踪鼠标这一事实之外。
如何让拇指在不跳跃的情况下跟踪鼠标位置?
【问题讨论】: