"Dylan Smith" <dylan.ah.smith(a)gmail.com> wrote:
@@ -1252,6 +1253,9 @@ static BOOL SCROLL_GetScrollBarInfo(HWND hwnd, LONG idObject, LPSCROLLBARINFO in
SCROLL_GetScrollBarRect(hwnd, nBar, &info->rcScrollBar, &nDummy, &info->dxyLineButton, &info->xyThumbTop); + /* rcScrollBar needs to be in screen coordinates */ + GetWindowRect(hwnd, &rect); + OffsetRect(&info->rcScrollBar, rect.left, rect.top);
You need to fix SCROLL_GetScrollBarRect for the SB_CTL case instead.
+static void scrollbar_test4(void) +{ + BOOL ret; + SCROLLBARINFO sbi; + RECT rect; + + /* Test GetScrollBarInfo to make sure it returns rcScrollBar in screen + * coordinates. */ + sbi.cbSize = sizeof(sbi); + ret = GetScrollBarInfo( hScroll, OBJID_CLIENT, &sbi); + ok( ret, "The GetScrollBarInfo() call should not fail.\n" ); + GetWindowRect( hScroll, &rect ); + ok( ret, "The GetWindowRect() call should not fail.\n" ); + ok( !(sbi.rgstate[0] & (STATE_SYSTEM_INVISIBLE|STATE_SYSTEM_OFFSCREEN)), + "unexpected rgstate(0x%x)\n", sbi.rgstate[0]); + ok( !memcmp(&rect, &sbi.rcScrollBar, sizeof(RECT)), + "WindowRect(%d, %d, %d, %d) != rcScrollBar(%d, %d, %d, %d)\n",
EqualRect is better than memcmp. -- Dmitry.