On Wednesday 05 March 2003 01:17, Alexandre Julliard wrote: > No, the message handling has to be changed too of course. Instead of > having the message handler call the API function it has to be done the > other way around, with the API function sending a message and the > handler doing the work by accessing the info structure directly.
Something like this? Andrew Index: controls/scroll.c =================================================================== RCS file: /home/wine/wine/controls/scroll.c,v retrieving revision 1.62 diff -u -r1.62 scroll.c --- controls/scroll.c 14 Jan 2003 23:41:01 -0000 1.62 +++ controls/scroll.c 5 Mar 2003 02:24:05 -0000 @@ -1192,6 +1192,27 @@ } +/************************************************************************* + * SCROLL_GetScrollRange + * + * Internal worker function for the API function + * + * RETURNS STD + */ +static BOOL SCROLL_GetScrollRange( +HWND hwnd, /* [in] Handle of window */ +INT nBar, /* [in] One of SB_HORZ, SB_VERT, or SB_CTL */ +LPINT lpMin, /* [out] Where to store minimum value */ +LPINT lpMax /* [out] Where to store maximum value */) +{ + SCROLLBAR_INFO *infoPtr = SCROLL_GetScrollInfo(hwnd, nBar); + + if (lpMin) *lpMin = infoPtr ? infoPtr->minVal : 0; + if (lpMax) *lpMax = infoPtr ? infoPtr->maxVal : 0; + + return infoPtr ? TRUE : FALSE; +} + /*********************************************************************** * ScrollBarWndProc */ @@ -1367,7 +1388,7 @@ return 0; case SBM_GETRANGE: - GetScrollRange( hwnd, SB_CTL, (LPINT)wParam, (LPINT)lParam ); + SCROLL_GetScrollRange( hwnd, SB_CTL, (LPINT)wParam, (LPINT)lParam ); return 0; case SBM_ENABLE_ARROWS16: @@ -1741,17 +1762,11 @@ LPINT lpMin, /* [out] Where to store minimum value */ LPINT lpMax /* [out] Where to store maximum value */) { - SCROLLBAR_INFO *infoPtr; - - if (!(infoPtr = SCROLL_GetScrollInfo( hwnd, nBar ))) - { - if (lpMin) lpMin = 0; - if (lpMax) lpMax = 0; - return FALSE; - } - if (lpMin) *lpMin = infoPtr->minVal; - if (lpMax) *lpMax = infoPtr->maxVal; - return TRUE; + /* Refer SB_CTL requests to the window */ + if (nBar == SB_CTL) + return SendMessageA(hwnd, SBM_GETRANGE, (WPARAM)lpMin, (LPARAM)lpMax); + else + return SCROLL_GetScrollRange(hwnd, nBar, lpMin, lpMax); }