I've noticed another two things where Wine and Windows XP differ:
1. SetScrollRange(hWnd, SB_VERT, 0, -1) does nothing in WinXP, and is equivalent to SetScrollRange(hWnd, SB_VERT, 0, 0) in Wine. I guess it's true for all kinds of invalid arguments.
2. In WinXP, returning -1 from WM_CREATE causes window creation to fail - the newly created window is automatically destroyed (which sends WM_DESTROY to the window). In Wine, WM_DESTROY is not sent (which prevents the example program to finish).
The short piece of relevant code can be downloaded from:
http://foltman.com/wintest-scroll.zip
Krzysztof