From c93da30330d9f3c310dfe5d1e467a396942f2492 Mon Sep 17 00:00:00 2001 From: narzoul Date: Sat, 19 Mar 2016 13:38:41 +0100 Subject: [PATCH] Added child window invalidation to scroll functions --- DDrawCompat/CompatGdiScrollFunctions.cpp | 16 ++++++++++++---- DDrawCompat/CompatGdiScrollFunctions.h | 1 + DDrawCompat/CompatGdiWinProc.cpp | 13 ++++--------- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/DDrawCompat/CompatGdiScrollFunctions.cpp b/DDrawCompat/CompatGdiScrollFunctions.cpp index e62780d..b3e1016 100644 --- a/DDrawCompat/CompatGdiScrollFunctions.cpp +++ b/DDrawCompat/CompatGdiScrollFunctions.cpp @@ -12,8 +12,9 @@ namespace _In_ const RECT *lpRect, _In_ const RECT *lpClipRect) { - InvalidateRect(hWnd, nullptr, TRUE); - return CALL_ORIG_GDI(ScrollWindow)(hWnd, XAmount, YAmount, lpRect, lpClipRect); + BOOL result = CALL_ORIG_GDI(ScrollWindow)(hWnd, XAmount, YAmount, lpRect, lpClipRect); + CompatGdiScrollFunctions::updateScrolledWindow(hWnd); + return result; } int WINAPI scrollWindowEx( @@ -26,8 +27,10 @@ namespace _Out_ LPRECT prcUpdate, _In_ UINT flags) { - InvalidateRect(hWnd, nullptr, TRUE); - return CALL_ORIG_GDI(ScrollWindowEx)(hWnd, dx, dy, prcScroll, prcClip, hrgnUpdate, prcUpdate, flags); + int result = CALL_ORIG_GDI(ScrollWindowEx)( + hWnd, dx, dy, prcScroll, prcClip, hrgnUpdate, prcUpdate, flags); + CompatGdiScrollFunctions::updateScrolledWindow(hWnd); + return result; } } @@ -40,4 +43,9 @@ namespace CompatGdiScrollFunctions HOOK_GDI_FUNCTION(user32, ScrollWindowEx, scrollWindowEx); DetourTransactionCommit(); } + + void updateScrolledWindow(HWND hwnd) + { + RedrawWindow(hwnd, nullptr, nullptr, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN); + } } diff --git a/DDrawCompat/CompatGdiScrollFunctions.h b/DDrawCompat/CompatGdiScrollFunctions.h index 7c8e489..3aa9260 100644 --- a/DDrawCompat/CompatGdiScrollFunctions.h +++ b/DDrawCompat/CompatGdiScrollFunctions.h @@ -3,4 +3,5 @@ namespace CompatGdiScrollFunctions { void installHooks(); + void updateScrolledWindow(HWND hwnd); }; diff --git a/DDrawCompat/CompatGdiWinProc.cpp b/DDrawCompat/CompatGdiWinProc.cpp index 57a941b..a5d1382 100644 --- a/DDrawCompat/CompatGdiWinProc.cpp +++ b/DDrawCompat/CompatGdiWinProc.cpp @@ -8,6 +8,7 @@ #include "CompatGdi.h" #include "CompatGdiDc.h" #include "CompatGdiScrollBar.h" +#include "CompatGdiScrollFunctions.h" #include "CompatGdiTitleBar.h" #include "CompatGdiWinProc.h" #include "DDrawLog.h" @@ -21,7 +22,6 @@ namespace void ncPaint(HWND hwnd); void onWindowPosChanged(HWND hwnd); void removeDropShadow(HWND hwnd); - void updateScrolledWindow(HWND hwnd); LRESULT CALLBACK callWndRetProc(int nCode, WPARAM wParam, LPARAM lParam) { @@ -60,7 +60,7 @@ namespace } else if (WM_VSCROLL == ret->message || WM_HSCROLL == ret->message) { - updateScrolledWindow(ret->hwnd); + CompatGdiScrollFunctions::updateScrolledWindow(ret->hwnd); } else if (WM_COMMAND == ret->message) { @@ -68,7 +68,7 @@ namespace auto notifCode = HIWORD(ret->wParam); if (0 != msgSource && 1 != msgSource && (EN_HSCROLL == notifCode || EN_VSCROLL == notifCode)) { - updateScrolledWindow(reinterpret_cast(ret->lParam)); + CompatGdiScrollFunctions::updateScrolledWindow(reinterpret_cast(ret->lParam)); } } else if (BM_SETSTYLE == ret->message) @@ -127,7 +127,7 @@ namespace auto mhs = reinterpret_cast(lParam); if (WM_MOUSEWHEEL == wParam || WM_MOUSEHWHEEL == wParam) { - updateScrolledWindow(mhs->hwnd); + CompatGdiScrollFunctions::updateScrolledWindow(mhs->hwnd); } } @@ -246,11 +246,6 @@ namespace SetClassLongPtr(hwnd, GCL_STYLE, style ^ CS_DROPSHADOW); } } - - void updateScrolledWindow(HWND hwnd) - { - RedrawWindow(hwnd, nullptr, nullptr, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN); - } } namespace CompatGdiWinProc