From 3827007c0c140ecbe605a3dc053760b5acf09a8e Mon Sep 17 00:00:00 2001 From: narzoul Date: Thu, 31 Mar 2016 23:00:47 +0200 Subject: [PATCH] Avoid forced invalidation of the scroll bar child control when scrolling This was causing the scroll bar arrows to lose their pressed appearance. --- DDrawCompat/CompatGdiWinProc.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/DDrawCompat/CompatGdiWinProc.cpp b/DDrawCompat/CompatGdiWinProc.cpp index bc1fddd..95ae4c7 100644 --- a/DDrawCompat/CompatGdiWinProc.cpp +++ b/DDrawCompat/CompatGdiWinProc.cpp @@ -19,6 +19,7 @@ namespace void disableDwmAttributes(HWND hwnd); void onMenuSelect(); + void onScroll(HWND hwnd, HWND scrollBar); void onWindowPosChanged(HWND hwnd); void removeDropShadow(HWND hwnd); @@ -45,7 +46,7 @@ namespace } else if (WM_VSCROLL == ret->message || WM_HSCROLL == ret->message) { - CompatGdiScrollFunctions::updateScrolledWindow(ret->hwnd); + onScroll(ret->hwnd, reinterpret_cast(ret->lParam)); } else if (WM_COMMAND == ret->message) { @@ -146,6 +147,21 @@ namespace } } + void onScroll(HWND hwnd, HWND scrollBar) + { + if (scrollBar) + { + UpdateWindow(scrollBar); + } + + CompatGdiScrollFunctions::updateScrolledWindow(hwnd); + + if (scrollBar) + { + ValidateRect(scrollBar, nullptr); + } + } + void onWindowPosChanged(HWND hwnd) { CompatGdi::GdiScopedThreadLock lock;