Răsfoiți Sursa

Windows shell: Capture mouse while dragging

Michael Ragazzon 5 ani în urmă
părinte
comite
725faaf472

+ 1 - 1
Samples/shell/include/win32/InputWin32.h

@@ -45,7 +45,7 @@ public:
 	static void Shutdown();
 
 	/// Process the Windows message.
-	static void ProcessWindowsEvent(UINT message, WPARAM w_param, LPARAM l_param);
+	static void ProcessWindowsEvent(HWND window, UINT message, WPARAM w_param, LPARAM l_param);
 };
 
 #endif

+ 4 - 2
Samples/shell/src/win32/InputWin32.cpp

@@ -50,7 +50,7 @@ void InputWin32::Shutdown()
 {
 }
 
-void InputWin32::ProcessWindowsEvent(UINT message, WPARAM w_param, LPARAM l_param)
+void InputWin32::ProcessWindowsEvent(HWND window, UINT message, WPARAM w_param, LPARAM l_param)
 {
 	if (context == nullptr)
 		return;
@@ -60,9 +60,11 @@ void InputWin32::ProcessWindowsEvent(UINT message, WPARAM w_param, LPARAM l_para
 	{
 		case WM_LBUTTONDOWN:
 			context->ProcessMouseButtonDown(0, GetKeyModifierState());
+			SetCapture(window);
 			break;
 
 		case WM_LBUTTONUP:
+			ReleaseCapture();
 			context->ProcessMouseButtonUp(0, GetKeyModifierState());
 			break;
 
@@ -83,7 +85,7 @@ void InputWin32::ProcessWindowsEvent(UINT message, WPARAM w_param, LPARAM l_para
 			break;
 
 		case WM_MOUSEMOVE:
-			context->ProcessMouseMove(LOWORD(l_param), HIWORD(l_param), GetKeyModifierState());
+			context->ProcessMouseMove(static_cast<int>((short)LOWORD(l_param)), static_cast<int>((short)HIWORD(l_param)), GetKeyModifierState());
 			break;
 
 		case WM_MOUSEWHEEL:

+ 1 - 1
Samples/shell/src/win32/ShellWin32.cpp

@@ -412,7 +412,7 @@ static LRESULT CALLBACK WindowProcedure(HWND local_window_handle, UINT message,
 
 		default:
 		{
-			InputWin32::ProcessWindowsEvent(message, w_param, l_param);
+			InputWin32::ProcessWindowsEvent(local_window_handle, message, w_param, l_param);
 		}
 		break;
 	}