关于鼠标滚轮的有关问题
关于鼠标滚轮的问题
哪位大人能给解释一下iAccumDelta变量和两个while循环的的作用!希望不要嫌分,少先谢谢了!
说明: static int iDeltaPerLine,iAccumDelta ;
--------------------------------------
......
......
iDeltaPerLine = WHEEL_DELTA / ulScrollLines ; //这个值应该为3
......
......
case WM_MOUSEWHEEL:
if (iDeltaPerLine == 0)
break ;
iAccumDelta += (short) HIWORD (wParam) ; // 120 or -120
while (iAccumDelta > = iDeltaPerLine)
{
SendMessage (hwnd, WM_VSCROLL, SB_LINEUP, 0) ;
iAccumDelta -= iDeltaPerLine ;
}
while (iAccumDelta <= -iDeltaPerLine)
{
SendMessage (hwnd, WM_VSCROLL, SB_LINEDOWN, 0) ;
iAccumDelta += iDeltaPerLine ;
}
return 0 ;
......
......
------解决方案--------------------
从代码来看:
iAccumDelta,是鼠标已经滚动的行数,正为向上,负为向下。
iDeltaPerLine,为设定的一次滚动多少行,超过这个值时才滚动。
while (iAccumDelta > = iDeltaPerLine),判断向上滚动。
while (iAccumDelta <= -iDeltaPerLine),判断向下滚动。
哪位大人能给解释一下iAccumDelta变量和两个while循环的的作用!希望不要嫌分,少先谢谢了!
说明: static int iDeltaPerLine,iAccumDelta ;
--------------------------------------
......
......
iDeltaPerLine = WHEEL_DELTA / ulScrollLines ; //这个值应该为3
......
......
case WM_MOUSEWHEEL:
if (iDeltaPerLine == 0)
break ;
iAccumDelta += (short) HIWORD (wParam) ; // 120 or -120
while (iAccumDelta > = iDeltaPerLine)
{
SendMessage (hwnd, WM_VSCROLL, SB_LINEUP, 0) ;
iAccumDelta -= iDeltaPerLine ;
}
while (iAccumDelta <= -iDeltaPerLine)
{
SendMessage (hwnd, WM_VSCROLL, SB_LINEDOWN, 0) ;
iAccumDelta += iDeltaPerLine ;
}
return 0 ;
......
......
------解决方案--------------------
从代码来看:
iAccumDelta,是鼠标已经滚动的行数,正为向上,负为向下。
iDeltaPerLine,为设定的一次滚动多少行,超过这个值时才滚动。
while (iAccumDelta > = iDeltaPerLine),判断向上滚动。
while (iAccumDelta <= -iDeltaPerLine),判断向下滚动。