15,978
社区成员
发帖
与我相关
我的任务
分享
VOID ArrowTimerProc(HWND hArrow, UINT wMsg, UINT nID, DWORD dwTime)
{
WORD wScroll;
DWORD dwSpinnerState;
// GWL_USERDATA =-21
dwSpinnerState = (DWORD) GetWindowLong (hArrow, GWL_SPINNERSTATE);
if (StateTest(dwSpinnerState, SPINNERSTATE_CLICKED))
{// DOWNCLICK makes SB_LINEUP
wScroll = (StateTest(dwSpinnerState,
SPINNERSTATE_DOWNCLICK)) ? SB_LINEDOWN : SB_LINEUP;
if (uRightBt == WM_RBUTTONDOWN) wScroll += SB_PAGEUP - SB_LINEUP;
{
SendMessage(hArrow,WM_VSCROLL,MAKELONG(wScroll,GetWindowLong(hArrow, GWL_ID)),
(LONG) hArrow);
}
}
// Don't need to call KillTimer(), because SetTimer will reset the right one
// SetTimer(hWnd,nID, 50, (TIMERPROC) ArrowTimerProc);
return ;
}
其中 SendMessage(hArrow, WM_VSCROLL 使得 MessageBox 又弹出。
case WM_CANCELMODE:
// IMPORTANT MESSAGE! WM_CANCELMODE means that a
// dialog or some other modal process has started.
// we must make sure that we cancel any clicked state
// we are in, kill the timers, and release the capture.
StateClear(dwSpinnerState, SPINNERSTATE_CLICKED);
if (bArrowTimed)
{
SendMessage (hParent, WM_VSCROLL, MAKELONG(SB_ENDSCROLL,
GetWindowLong (hArrow, GWL_ID)), (LONG) hArrow);
KillTimer (hArrow, GetWindowLong (hArrow, GWL_ID));
bArrowTimed = FALSE;
}
ReleaseCapture();
break;