diff options
author | crupest <crupest@outlook.com> | 2018-11-27 17:53:21 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2018-11-27 17:53:21 +0800 |
commit | 7ccb08ac09a83e81a822712b712dc0473c9b23cf (patch) | |
tree | a5757aca9903a5bcddf6b480d57030fd27b2ba1f /src/ui/window.cpp | |
parent | 7e00386fc0895f8b08cd64ef737cb6c618955635 (diff) | |
download | cru-7ccb08ac09a83e81a822712b712dc0473c9b23cf.tar.gz cru-7ccb08ac09a83e81a822712b712dc0473c9b23cf.tar.bz2 cru-7ccb08ac09a83e81a822712b712dc0473c9b23cf.zip |
Add mouse wheel support.
Diffstat (limited to 'src/ui/window.cpp')
-rw-r--r-- | src/ui/window.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/ui/window.cpp b/src/ui/window.cpp index ceabddef..9352b747 100644 --- a/src/ui/window.cpp +++ b/src/ui/window.cpp @@ -412,6 +412,14 @@ namespace cru::ui result = 0; return true; } + case WM_MOUSEWHEEL: + POINT point; + point.x = GET_X_LPARAM(l_param); + point.y = GET_Y_LPARAM(l_param); + ScreenToClient(hwnd, &point); + OnMouseWheelInternal(GET_WHEEL_DELTA_WPARAM(w_param), point); + result = 0; + return true; case WM_KEYDOWN: OnKeyDownInternal(static_cast<int>(w_param)); result = 0; @@ -722,6 +730,20 @@ namespace cru::ui DispatchEvent(control, &Control::RaiseMouseUpEvent, nullptr, dip_point, button); } + void Window::OnMouseWheelInternal(short delta, POINT point) + { + const auto dip_point = PiToDip(point); + + Control* control; + + if (mouse_capture_control_) + control = mouse_capture_control_; + else + control = HitTest(dip_point); + + DispatchEvent(control, &Control::RaiseMouseWheelEvent, nullptr, dip_point, static_cast<float>(delta)); + } + void Window::OnKeyDownInternal(int virtual_code) { DispatchEvent(focus_control_, &Control::RaiseKeyDownEvent, nullptr, virtual_code); |