comctl32/updown: Allow ranges with max < min for Up/Down control.
This commit is contained in:
parent
8320686fb2
commit
b2917cf598
|
@ -469,6 +469,27 @@ static LRESULT UPDOWN_KeyPressed(UPDOWN_INFO *infoPtr, int key)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* UPDOWN_SetRange
|
||||
*
|
||||
* Handle UDM_SETRANGE, UDM_SETRANGE32
|
||||
*
|
||||
* FIXME: handle Max == Min properly:
|
||||
* - arrows should be disabled (without WS_DISABLED set),
|
||||
* visually they can't be pressed and don't respond;
|
||||
* - all input messages should still pass in.
|
||||
*/
|
||||
static LRESULT UPDOWN_SetRange(UPDOWN_INFO *infoPtr, INT Max, INT Min)
|
||||
{
|
||||
infoPtr->MaxVal = Max;
|
||||
infoPtr->MinVal = Min;
|
||||
|
||||
TRACE("UpDown Ctrl new range(%d to %d), hwnd=%p\n",
|
||||
infoPtr->MinVal, infoPtr->MaxVal, infoPtr->Self);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* UPDOWN_MouseWheel
|
||||
*
|
||||
|
@ -1045,12 +1066,11 @@ static LRESULT WINAPI UpDownWindowProc(HWND hwnd, UINT message, WPARAM wParam, L
|
|||
return MAKELONG(infoPtr->MaxVal, infoPtr->MinVal);
|
||||
|
||||
case UDM_SETRANGE:
|
||||
/* we must have: */
|
||||
infoPtr->MaxVal = (short)(lParam); /* UD_MINVAL <= Max <= UD_MAXVAL */
|
||||
infoPtr->MinVal = (short)HIWORD(lParam); /* UD_MINVAL <= Min <= UD_MAXVAL */
|
||||
/* |Max-Min| <= UD_MAXVAL */
|
||||
TRACE("UpDown Ctrl new range(%d to %d), hwnd=%p\n",
|
||||
infoPtr->MinVal, infoPtr->MaxVal, hwnd);
|
||||
/* we must have:
|
||||
UD_MINVAL <= Max <= UD_MAXVAL
|
||||
UD_MINVAL <= Min <= UD_MAXVAL
|
||||
|Max-Min| <= UD_MAXVAL */
|
||||
UPDOWN_SetRange(infoPtr, (short)lParam, (short)HIWORD(lParam));
|
||||
break;
|
||||
|
||||
case UDM_GETRANGE32:
|
||||
|
@ -1059,12 +1079,7 @@ static LRESULT WINAPI UpDownWindowProc(HWND hwnd, UINT message, WPARAM wParam, L
|
|||
break;
|
||||
|
||||
case UDM_SETRANGE32:
|
||||
infoPtr->MinVal = (INT)wParam;
|
||||
infoPtr->MaxVal = (INT)lParam;
|
||||
if (infoPtr->MaxVal <= infoPtr->MinVal)
|
||||
infoPtr->MaxVal = infoPtr->MinVal + 1;
|
||||
TRACE("UpDown Ctrl new range(%d to %d), hwnd=%p\n",
|
||||
infoPtr->MinVal, infoPtr->MaxVal, hwnd);
|
||||
UPDOWN_SetRange(infoPtr, (INT)lParam, (INT)wParam);
|
||||
break;
|
||||
|
||||
case UDM_GETPOS32:
|
||||
|
|
Loading…
Reference in New Issue