Implementation of DragDetect. Based on Wine code (C) 1993, 1994 Alexandre Julliard.
authorFilip Navara <filip.navara@gmail.com>
Tue, 7 Jun 2005 16:54:15 +0000 (16:54 +0000)
committerFilip Navara <filip.navara@gmail.com>
Tue, 7 Jun 2005 16:54:15 +0000 (16:54 +0000)
svn path=/trunk/; revision=15831

reactos/lib/user32/windows/input.c

index d041c8e..35be047 100644 (file)
@@ -44,7 +44,46 @@ DragDetect(
   HWND hWnd,
   POINT pt)
 {
+#if 0
   return NtUserDragDetect(hWnd, pt.x, pt.y);
+#else
+  MSG msg;
+  RECT rect;
+  POINT tmp;
+  ULONG dx = NtUserGetSystemMetrics(SM_CXDRAG);
+  ULONG dy = NtUserGetSystemMetrics(SM_CYDRAG);
+
+  rect.left = pt.x - dx;
+  rect.right = pt.x + dx;
+  rect.top = pt.y - dy;
+  rect.bottom = pt.y + dy;
+
+  SetCapture(hWnd);
+
+  for (;;)
+  {
+    while (PeekMessageW(&msg, 0, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE))
+    {
+      if (msg.message == WM_LBUTTONUP)
+      {
+        ReleaseCapture();
+        return 0;
+      }
+      if (msg.message == WM_MOUSEMOVE)
+      {
+        tmp.x = LOWORD(msg.lParam);
+        tmp.y = HIWORD(msg.lParam);
+        if (!PtInRect(&rect, tmp))
+        {
+          ReleaseCapture();
+          return 1;
+        }
+      }
+    }
+    WaitMessage();
+  }
+  return 0;
+#endif
 }