Implemented Mousewheel support.
diff --git a/controls/combo.c b/controls/combo.c
index f297845..731c9b7 100644
--- a/controls/combo.c
+++ b/controls/combo.c
@@ -1936,6 +1936,14 @@
if( lphc->wState & CBF_CAPTURE )
COMBO_MouseMove( lphc, wParam, lParam );
return TRUE;
+
+ case WM_MOUSEWHEEL:
+ if (wParam & (MK_SHIFT | MK_CONTROL))
+ return DefWindowProcA( hwnd, message, wParam, lParam );
+ if ((short) HIWORD(wParam) > 0) return SendMessageA(hwnd,WM_KEYDOWN,VK_UP,0);
+ if ((short) HIWORD(wParam) < 0) return SendMessageA(hwnd,WM_KEYDOWN,VK_DOWN,0);
+ return TRUE;
+
/* Combo messages */
case CB_ADDSTRING16:
diff --git a/controls/edit.c b/controls/edit.c
index 29cf1ee..284b18a 100644
--- a/controls/edit.c
+++ b/controls/edit.c
@@ -870,6 +870,25 @@
result = EDIT_WM_VScroll(wnd, es, LOWORD(wParam), SHIWORD(wParam), (HWND)(lParam));
break;
+ case WM_MOUSEWHEEL:
+ {
+ short gcWheelDelta = 0;
+ UINT pulScrollLines = 3;
+ SystemParametersInfoW(SPI_GETWHEELSCROLLLINES,0, &pulScrollLines, 0);
+
+ if (wParam & (MK_SHIFT | MK_CONTROL)) {
+ result = DefWindowProcA(hwnd, msg, wParam, lParam);
+ break;
+ }
+ gcWheelDelta -= (short) HIWORD(wParam);
+ if (abs(gcWheelDelta) >= WHEEL_DELTA && pulScrollLines)
+ {
+ int cLineScroll= (int) min((UINT) es->line_count, pulScrollLines);
+ cLineScroll *= (gcWheelDelta / WHEEL_DELTA);
+ result = EDIT_EM_LineScroll(wnd, es, 0, cLineScroll);
+ }
+ }
+ break;
default:
result = DefWindowProcA(hwnd, msg, wParam, lParam);
break;
diff --git a/controls/listbox.c b/controls/listbox.c
index 6c697bb..fa13ba7 100644
--- a/controls/listbox.c
+++ b/controls/listbox.c
@@ -1767,6 +1767,23 @@
return 0;
}
+static LRESULT LISTBOX_HandleMouseWheel(WND *wnd, LB_DESCR *descr,WPARAM wParam, LPARAM lParam )
+{
+ short gcWheelDelta = 0;
+ UINT pulScrollLines = 3;
+
+ SystemParametersInfoW(SPI_GETWHEELSCROLLLINES,0, &pulScrollLines, 0);
+
+ gcWheelDelta -= (short) HIWORD(wParam);
+
+ if (abs(gcWheelDelta) >= WHEEL_DELTA && pulScrollLines)
+ {
+ int cLineScroll = (int) min((UINT) descr->page_size, pulScrollLines);
+ cLineScroll *= (gcWheelDelta / WHEEL_DELTA);
+ LISTBOX_SetTopItem( wnd, descr, descr->top_item + cLineScroll, TRUE );
+ }
+ return 0;
+}
/***********************************************************************
* LISTBOX_HandleLButtonDown
@@ -2668,6 +2685,10 @@
return LISTBOX_HandleHScroll( wnd, descr, wParam, lParam );
case WM_VSCROLL:
return LISTBOX_HandleVScroll( wnd, descr, wParam, lParam );
+ case WM_MOUSEWHEEL:
+ if (wParam & (MK_SHIFT | MK_CONTROL))
+ return DefWindowProcA( hwnd, msg, wParam, lParam );
+ return LISTBOX_HandleMouseWheel( wnd, descr, wParam, lParam );
case WM_LBUTTONDOWN:
return LISTBOX_HandleLButtonDown( wnd, descr, wParam,
(INT16)LOWORD(lParam),