diff --git a/modules/juce_gui_basics/native/juce_Windowing_windows.cpp b/modules/juce_gui_basics/native/juce_Windowing_windows.cpp index 7ac37adb55..32cd2ad204 100644 --- a/modules/juce_gui_basics/native/juce_Windowing_windows.cpp +++ b/modules/juce_gui_basics/native/juce_Windowing_windows.cpp @@ -3196,7 +3196,7 @@ private: doMouseEvent (getCurrentMousePos(), MouseInputSource::defaultPressure); } - ComponentPeer* findPeerUnderMouse (Point& localPos) + std::tuple> findPeerUnderMouse() { auto currentMousePos = getPOINTFromLParam ((LPARAM) GetMessagePos()); @@ -3207,8 +3207,7 @@ private: if (peer == nullptr) peer = this; - localPos = peer->globalToLocal (convertPhysicalScreenPointToLogical (pointFromPOINT (currentMousePos), hwnd).toFloat()); - return peer; + return std::tuple (peer, peer->globalToLocal (convertPhysicalScreenPointToLogical (pointFromPOINT (currentMousePos), hwnd).toFloat())); } static MouseInputSource::InputSourceType getPointerType (WPARAM wParam) @@ -3242,9 +3241,7 @@ private: wheel.isSmooth = false; wheel.isInertial = false; - Point localPos; - - if (auto* peer = findPeerUnderMouse (localPos)) + if (const auto [peer, localPos] = findPeerUnderMouse(); peer != nullptr) peer->handleMouseWheel (getPointerType (wParam), localPos, getMouseEventTime(), wheel); } @@ -3257,9 +3254,8 @@ private: if (getGestureInfo != nullptr && getGestureInfo ((HGESTUREINFO) lParam, &gi)) { updateKeyModifiers(); - Point localPos; - if (auto* peer = findPeerUnderMouse (localPos)) + if (const auto [peer, localPos] = findPeerUnderMouse(); peer != nullptr) { switch (gi.dwID) { diff --git a/modules/juce_gui_basics/native/juce_WindowsHooks_windows.cpp b/modules/juce_gui_basics/native/juce_WindowsHooks_windows.cpp index 97afe888ee..fe7927ecb0 100644 --- a/modules/juce_gui_basics/native/juce_WindowsHooks_windows.cpp +++ b/modules/juce_gui_basics/native/juce_WindowsHooks_windows.cpp @@ -55,9 +55,14 @@ private: auto& hs = *(MOUSEHOOKSTRUCTEX_*) lParam; if (auto* comp = Desktop::getInstance().findComponentAt ({ hs.pt.x, hs.pt.y })) - if (comp->getWindowHandle() != nullptr) - return PostMessage ((HWND) comp->getWindowHandle(), WM_MOUSEWHEEL, - hs.mouseData & 0xffff0000, (hs.pt.x & 0xffff) | (hs.pt.y << 16)); + { + if (auto* target = static_cast (comp->getWindowHandle())) + { + const ScopedThreadDPIAwarenessSetter scope { target }; + return PostMessage (target, WM_MOUSEWHEEL, + hs.mouseData & 0xffff0000, MAKELPARAM (hs.pt.x, hs.pt.y)); + } + } } return CallNextHookEx (getSingleton()->mouseWheelHook, nCode, wParam, lParam);