Alexandre Julliard : user32: Add some error checking in ScreenToClient and ClientToScreen.

Alexandre Julliard julliard at winehq.org
Wed Nov 14 13:17:16 CST 2012


Module: wine
Branch: master
Commit: 7fc61f6fea27d207706f896dbf47285516ebe760
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7fc61f6fea27d207706f896dbf47285516ebe760

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Nov 14 16:29:39 2012 +0100

user32: Add some error checking in ScreenToClient and ClientToScreen.

---

 dlls/user32/winpos.c |   62 +++++++++++++++++++++++++++++++++----------------
 1 files changed, 42 insertions(+), 20 deletions(-)

diff --git a/dlls/user32/winpos.c b/dlls/user32/winpos.c
index c620df9..0ce3ddd 100644
--- a/dlls/user32/winpos.c
+++ b/dlls/user32/winpos.c
@@ -235,26 +235,6 @@ BOOL WINAPI GetClientRect( HWND hwnd, LPRECT rect )
 }
 
 
-/*******************************************************************
- *		ClientToScreen (USER32.@)
- */
-BOOL WINAPI ClientToScreen( HWND hwnd, LPPOINT lppnt )
-{
-    MapWindowPoints( hwnd, 0, lppnt, 1 );
-    return TRUE;
-}
-
-
-/*******************************************************************
- *		ScreenToClient (USER32.@)
- */
-BOOL WINAPI ScreenToClient( HWND hwnd, LPPOINT lppnt )
-{
-    MapWindowPoints( 0, hwnd, lppnt, 1 );
-    return TRUE;
-}
-
-
 /***********************************************************************
  *           list_children_from_point
  *
@@ -588,6 +568,48 @@ INT WINAPI MapWindowPoints( HWND hwndFrom, HWND hwndTo, LPPOINT lppt, UINT count
 }
 
 
+/*******************************************************************
+ *		ClientToScreen (USER32.@)
+ */
+BOOL WINAPI ClientToScreen( HWND hwnd, LPPOINT lppnt )
+{
+    POINT offset;
+    BOOL mirrored;
+
+    if (!hwnd)
+    {
+        SetLastError( ERROR_INVALID_WINDOW_HANDLE );
+        return FALSE;
+    }
+    if (!WINPOS_GetWinOffset( hwnd, 0, &mirrored, &offset )) return FALSE;
+    lppnt->x += offset.x;
+    lppnt->y += offset.y;
+    if (mirrored) lppnt->x = -lppnt->x;
+    return TRUE;
+}
+
+
+/*******************************************************************
+ *		ScreenToClient (USER32.@)
+ */
+BOOL WINAPI ScreenToClient( HWND hwnd, LPPOINT lppnt )
+{
+    POINT offset;
+    BOOL mirrored;
+
+    if (!hwnd)
+    {
+        SetLastError( ERROR_INVALID_WINDOW_HANDLE );
+        return FALSE;
+    }
+    if (!WINPOS_GetWinOffset( 0, hwnd, &mirrored, &offset )) return FALSE;
+    lppnt->x += offset.x;
+    lppnt->y += offset.y;
+    if (mirrored) lppnt->x = -lppnt->x;
+    return TRUE;
+}
+
+
 /***********************************************************************
  *		IsIconic (USER32.@)
  */




More information about the wine-cvs mailing list