user32: Fix some compilation warnings in 64-bit mode.
diff --git a/dlls/user32/caret.c b/dlls/user32/caret.c
index 308dc2b..8487f0c 100644
--- a/dlls/user32/caret.c
+++ b/dlls/user32/caret.c
@@ -156,7 +156,7 @@
 		{
 		    HBITMAP hPrevBmp = SelectObject(hMemDC, hBmp);
                     SetRect( &r, 0, 0, width, height );
-		    FillRect(hMemDC, &r, (HBRUSH)((bitmap ? COLOR_GRAYTEXT : COLOR_WINDOW) + 1));
+		    FillRect(hMemDC, &r, ULongToHandle((bitmap ? COLOR_GRAYTEXT : COLOR_WINDOW) + 1));
 		    SelectObject(hMemDC, hPrevBmp);
 		}
 		DeleteDC(hMemDC);
diff --git a/dlls/user32/dde_misc.c b/dlls/user32/dde_misc.c
index 24062c3..cac3192 100644
--- a/dlls/user32/dde_misc.c
+++ b/dlls/user32/dde_misc.c
@@ -1984,7 +1984,7 @@
  *
  */
 BOOL		WDML_PostAck(WDML_CONV* pConv, WDML_SIDE side, WORD appRetCode,
-			     BOOL fBusy, BOOL fAck, UINT pmt, LPARAM lParam, UINT oldMsg)
+			     BOOL fBusy, BOOL fAck, UINT_PTR pmt, LPARAM lParam, UINT oldMsg)
 {
     DDEACK	ddeAck;
     HWND	from, to;
diff --git a/dlls/user32/dde_private.h b/dlls/user32/dde_private.h
index 00882e4..95b6a31 100644
--- a/dlls/user32/dde_private.h
+++ b/dlls/user32/dde_private.h
@@ -210,7 +210,7 @@
 extern	WDML_CONV*	WDML_FindConv(WDML_INSTANCE* pInstance, WDML_SIDE side,
 				      HSZ hszService, HSZ hszTopic);
 extern  BOOL		WDML_PostAck(WDML_CONV* pConv, WDML_SIDE side, WORD appRetCode,
-				     BOOL fBusy, BOOL fAck, UINT pmt, LPARAM lParam, UINT oldMsg);
+				     BOOL fBusy, BOOL fAck, UINT_PTR pmt, LPARAM lParam, UINT oldMsg);
 extern	void		WDML_AddLink(WDML_INSTANCE* pInstance, HCONV hConv, WDML_SIDE side,
 				     UINT wType, HSZ hszItem, UINT wFmt);
 extern	WDML_LINK*	WDML_FindLink(WDML_INSTANCE* pInstance, HCONV hConv, WDML_SIDE side,
diff --git a/dlls/user32/dde_server.c b/dlls/user32/dde_server.c
index e047724..8f43c36 100644
--- a/dlls/user32/dde_server.c
+++ b/dlls/user32/dde_server.c
@@ -800,7 +800,7 @@
     case DDE_FNOTPROCESSED:
 	break;
     }
-    WDML_PostAck(pConv, WDML_SERVER_SIDE, 0, fBusy, fAck, (UINT)pXAct->hMem, 0, 0);
+    WDML_PostAck(pConv, WDML_SERVER_SIDE, 0, fBusy, fAck, (UINT_PTR)pXAct->hMem, 0, 0);
 
     return WDML_QS_HANDLED;
 }
diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c
index 9b61fb3..3f2282f 100644
--- a/dlls/user32/edit.c
+++ b/dlls/user32/edit.c
@@ -1686,7 +1686,7 @@
  */
 static void EDIT_LockBuffer(EDITSTATE *es)
 {
-	STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
+	STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
 	HINSTANCE16 hInstance = GetWindowLongPtrW( es->hwndSelf, GWLP_HINSTANCE );
 
 	if (!es->text) {
@@ -2487,7 +2487,7 @@
 		    TRACE("Synchronizing with 16-bit ANSI buffer\n");
 		    TRACE("%d WCHARs translated to %d bytes\n", countW, countA_new);
 
-		    stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
+		    stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
 		    oldDS = stack16->ds;
 		    stack16->ds = GetWindowLongPtrW( es->hwndSelf, GWLP_HINSTANCE );
 
@@ -2760,7 +2760,7 @@
 	if (es->hloc16)
 		return es->hloc16;
 
-	stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
+	stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
 	oldDS = stack16->ds;
 	stack16->ds = GetWindowLongPtrW( es->hwndSelf, GWLP_HINSTANCE );
 
@@ -3506,7 +3506,7 @@
 
 	if(es->hloc16)
 	{
-	    STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
+	    STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
 	    HANDLE16 oldDS = stack16->ds;
 	
 	    stack16->ds = GetWindowLongPtrW( es->hwndSelf, GWLP_HINSTANCE );
@@ -3578,7 +3578,7 @@
  */
 static void EDIT_EM_SetHandle16(EDITSTATE *es, HLOCAL16 hloc)
 {
-	STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
+	STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
 	HINSTANCE16 hInstance = GetWindowLongPtrW( es->hwndSelf, GWLP_HINSTANCE );
 	HANDLE16 oldDS = stack16->ds;
 	INT countW, countA;
@@ -4235,7 +4235,7 @@
 		LocalFree(es->hloc32A);
 	}
 	if (es->hloc16) {
-		STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
+		STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
 		HANDLE16 oldDS = stack16->ds;
 
 		stack16->ds = GetWindowLongPtrW( es->hwndSelf, GWLP_HINSTANCE );
diff --git a/dlls/user32/mdi.c b/dlls/user32/mdi.c
index 06c44d7..5825220 100644
--- a/dlls/user32/mdi.c
+++ b/dlls/user32/mdi.c
@@ -1062,7 +1062,7 @@
 	}
         else
 	{
-	    LPCLIENTCREATESTRUCT16 ccs = MapSL((SEGPTR)cs->lpCreateParams);
+	    LPCLIENTCREATESTRUCT16 ccs = MapSL(PtrToUlong(cs->lpCreateParams));
 	    ci->hWindowMenu	= HMENU_32(ccs->hWindowMenu);
 	    ci->idFirstChild	= ccs->idFirstChild;
 	}
diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c
index 0aa110f..692a70c 100644
--- a/dlls/user32/menu.c
+++ b/dlls/user32/menu.c
@@ -4245,7 +4245,7 @@
     HGLOBAL16 handle;
     HMENU16 hMenu;
 
-    if (HIWORD(name) && name[0] == '#') name = (LPCSTR)atoi( name + 1 );
+    if (HIWORD(name) && name[0] == '#') name = ULongToPtr(atoi( name + 1 ));
     if (!name) return 0;
 
     instance = GetExePtr( instance );
diff --git a/dlls/user32/message.c b/dlls/user32/message.c
index 7945fa6..bfdd807 100644
--- a/dlls/user32/message.c
+++ b/dlls/user32/message.c
@@ -1485,7 +1485,7 @@
 	    {
 		memcpy( ptr, *buffer, size );
 		GlobalUnlock( hMem );
-                TRACE( "exec: pairing c=%08lx s=%08x\n", *lparam, (DWORD)hMem );
+                TRACE( "exec: pairing c=%08lx s=%p\n", *lparam, hMem );
                 if (!dde_add_pair( (HGLOBAL)*lparam, hMem ))
                 {
                     GlobalFree( hMem );
diff --git a/dlls/user32/msg16.c b/dlls/user32/msg16.c
index 421f338..ffc01e2 100644
--- a/dlls/user32/msg16.c
+++ b/dlls/user32/msg16.c
@@ -194,7 +194,7 @@
             CREATESTRUCT16 *cs16 = MapSL(lParam);
             CREATESTRUCTA cs32;
 
-            cs32.lpCreateParams = (LPVOID)cs16->lpCreateParams;
+            cs32.lpCreateParams = ULongToPtr(cs16->lpCreateParams);
             cs32.hInstance      = HINSTANCE_32(cs16->hInstance);
             cs32.hMenu          = HMENU_32(cs16->hMenu);
             cs32.hwndParent     = WIN_Handle32(cs16->hwndParent);
diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c
index 6c9fe80..f8feb0d 100644
--- a/dlls/user32/sysparams.c
+++ b/dlls/user32/sysparams.c
@@ -2136,7 +2136,7 @@
         break;
 
     case SPI_SETMENUANIMATION:             /* 0x1003  _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */
-        ret = set_user_pref_param( 0, 0x02, (BOOL)pvParam, fWinIni );
+        ret = set_user_pref_param( 0, 0x02, PtrToUlong(pvParam), fWinIni );
         break;
 
     case SPI_GETCOMBOBOXANIMATION:         /* 0x1004  _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */
@@ -2144,7 +2144,7 @@
         break;
 
     case SPI_SETCOMBOBOXANIMATION:         /* 0x1005  _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */
-        ret = set_user_pref_param( 0, 0x04, (BOOL)pvParam, fWinIni );
+        ret = set_user_pref_param( 0, 0x04, PtrToUlong(pvParam), fWinIni );
         break;
 
     case SPI_GETLISTBOXSMOOTHSCROLLING:    /* 0x1006  _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */
@@ -2152,7 +2152,7 @@
         break;
 
     case SPI_SETLISTBOXSMOOTHSCROLLING:    /* 0x1007  _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */
-        ret = set_user_pref_param( 0, 0x08, (BOOL)pvParam, fWinIni );
+        ret = set_user_pref_param( 0, 0x08, PtrToUlong(pvParam), fWinIni );
         break;
 
     case SPI_GETGRADIENTCAPTIONS:
@@ -2160,7 +2160,7 @@
         break;
 
     case SPI_SETGRADIENTCAPTIONS:
-        ret = set_user_pref_param( 0, 0x10, (BOOL)pvParam, fWinIni );
+        ret = set_user_pref_param( 0, 0x10, PtrToUlong(pvParam), fWinIni );
         break;
 
     case SPI_GETKEYBOARDCUES:
@@ -2168,7 +2168,7 @@
         break;
 
     case SPI_SETKEYBOARDCUES:
-        ret = set_user_pref_param( 0, 0x20, (BOOL)pvParam, fWinIni );
+        ret = set_user_pref_param( 0, 0x20, PtrToUlong(pvParam), fWinIni );
         break;
 
     WINE_SPI_FIXME(SPI_GETACTIVEWNDTRKZORDER);  /* 0x100C  _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */
@@ -2178,7 +2178,7 @@
         break;
 
     case SPI_SETHOTTRACKING:
-        ret = set_user_pref_param( 0, 0x80, (BOOL)pvParam, fWinIni );
+        ret = set_user_pref_param( 0, 0x80, PtrToUlong(pvParam), fWinIni );
         break;
 
     WINE_SPI_FIXME(SPI_GETMENUFADE);            /* 0x1012  _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */
@@ -2188,7 +2188,7 @@
         break;
 
     case SPI_SETSELECTIONFADE:                  /* 0x1015  _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */
-        ret = set_user_pref_param( 1, 0x04, (BOOL)pvParam, fWinIni );
+        ret = set_user_pref_param( 1, 0x04, PtrToUlong(pvParam), fWinIni );
         break;
 
     case SPI_GETTOOLTIPANIMATION:               /* 0x1016  _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */
@@ -2196,7 +2196,7 @@
         break;
 
     case SPI_SETTOOLTIPANIMATION:               /* 0x1017  _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */
-        ret = set_user_pref_param( 1, 0x08, (BOOL)pvParam, fWinIni );
+        ret = set_user_pref_param( 1, 0x08, PtrToUlong(pvParam), fWinIni );
         break;
 
     case SPI_GETTOOLTIPFADE:                    /* 0x1018  _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */
@@ -2204,7 +2204,7 @@
         break;
 
     case SPI_SETTOOLTIPFADE:                    /* 0x1019  _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */
-        ret = set_user_pref_param( 1, 0x10, (BOOL)pvParam, fWinIni );
+        ret = set_user_pref_param( 1, 0x10, PtrToUlong(pvParam), fWinIni );
         break;
 
     case SPI_GETCURSORSHADOW:                   /* 0x101A  _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */
@@ -2212,7 +2212,7 @@
         break;
 
     case SPI_SETCURSORSHADOW:                   /* 0x101B  _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */
-        ret = set_user_pref_param( 1, 0x20, (BOOL)pvParam, fWinIni );
+        ret = set_user_pref_param( 1, 0x20, PtrToUlong(pvParam), fWinIni );
         break;
 
     WINE_SPI_FIXME(SPI_GETMOUSESONAR);          /* 0x101C  _WIN32_WINNT >= 0x510 || _WIN32_WINDOW >= 0x490*/
@@ -2226,7 +2226,7 @@
         break;
 
     case SPI_SETFLATMENU:
-        ret = set_user_pref_param( 2, 0x02, (BOOL)pvParam, fWinIni );
+        ret = set_user_pref_param( 2, 0x02, PtrToUlong(pvParam), fWinIni );
         break;
 
     WINE_SPI_FIXME(SPI_GETDROPSHADOW);          /* 0x1024  _WIN32_WINNT >= 0x510 */
@@ -2239,7 +2239,7 @@
 
     case SPI_SETUIEFFECTS:
         /* FIXME: this probably should mask other UI effect values when unset */
-        ret = set_user_pref_param( 3, 0x80, (BOOL)pvParam, fWinIni );
+        ret = set_user_pref_param( 3, 0x80, PtrToUlong(pvParam), fWinIni );
         break;
 
     WINE_SPI_FIXME(SPI_GETFOREGROUNDLOCKTIMEOUT);/* 0x2000  _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */
@@ -2904,11 +2904,11 @@
             SysColorBrushes[i] = pBrushes[i];
         }
 
-        return (DWORD)pOldCol;
+        return (DWORD)pOldCol; /* FIXME: pointer truncation */
     }
     if (!pPens && !pBrushes) /* "restore" call */
     {
-        LPVOID pOldCol = (LPVOID)n;
+        LPVOID pOldCol = (LPVOID)n; /* FIXME: not 64-bit safe */
         LPVOID p = pOldCol;
         DWORD nCount = *(DWORD *)p;
         p = (char*)p + sizeof(DWORD);
diff --git a/dlls/user32/uitools.c b/dlls/user32/uitools.c
index 9e5ca9f..b2e1239 100644
--- a/dlls/user32/uitools.c
+++ b/dlls/user32/uitools.c
@@ -1428,7 +1428,7 @@
 {
     HBRUSH prevBrush;
 
-    if (hbrush <= (HBRUSH) (COLOR_MAX + 1)) hbrush = GetSysColorBrush( (INT) hbrush - 1 );
+    if (hbrush <= (HBRUSH) (COLOR_MAX + 1)) hbrush = GetSysColorBrush( HandleToULong(hbrush) - 1 );
 
     if (!(prevBrush = SelectObject( hdc, hbrush ))) return 0;
     PatBlt( hdc, rect->left, rect->top,
diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h
index 99915cc..d6eac17 100644
--- a/dlls/user32/user_private.h
+++ b/dlls/user32/user_private.h
@@ -35,7 +35,7 @@
 
 static inline HLOCAL16 LOCAL_Alloc( HANDLE16 ds, UINT16 flags, WORD size )
 {
-    STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
+    STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
     HANDLE16 oldDS = stack16->ds;
     HLOCAL16 ret;
 
@@ -47,7 +47,7 @@
 
 static inline  HLOCAL16 LOCAL_ReAlloc( HANDLE16 ds, HLOCAL16 handle, WORD size, UINT16 flags )
 {
-    STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
+    STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
     HANDLE16 oldDS = stack16->ds;
     HLOCAL16 ret;
 
@@ -59,7 +59,7 @@
 
 static inline HLOCAL16 LOCAL_Free( HANDLE16 ds, HLOCAL16 handle )
 {
-    STACK16FRAME* stack16 = MapSL((SEGPTR)NtCurrentTeb()->WOW32Reserved);
+    STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved));
     HANDLE16 oldDS = stack16->ds;
     HLOCAL16 ret;
 
diff --git a/dlls/user32/win.c b/dlls/user32/win.c
index 35144bd..d9b3a2e 100644
--- a/dlls/user32/win.c
+++ b/dlls/user32/win.c
@@ -678,7 +678,7 @@
         UINT id = 0;
 
         MDI_CalcDefaultChildPos(cs->hwndParent, -1, pos, 0, &id);
-        if (!(cs->style & WS_POPUP)) cs->hMenu = (HMENU)id;
+        if (!(cs->style & WS_POPUP)) cs->hMenu = ULongToHandle(id);
 
         TRACE("MDI child id %04x\n", id);
     }
@@ -2125,7 +2125,7 @@
     if (is_winproc)
     {
         WNDPROC new_proc = WINPROC_AllocProc16( (WNDPROC16)newval );
-        WNDPROC old_proc = (WNDPROC)SetWindowLongA( WIN_Handle32(hwnd), offset, (LONG_PTR)new_proc );
+        WNDPROC old_proc = (WNDPROC)SetWindowLongPtrA( WIN_Handle32(hwnd), offset, (LONG_PTR)new_proc );
         return (LONG)WINPROC_GetProc16( (WNDPROC)old_proc, FALSE );
     }
     else return SetWindowLongA( WIN_Handle32(hwnd), offset, newval );
diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c
index 302cf3d..59d432d 100644
--- a/dlls/user32/winproc.c
+++ b/dlls/user32/winproc.c
@@ -530,7 +530,7 @@
         if (size)
         {
             memcpy( &args.u, MapSL(lParam), size );
-            lParam = (SEGPTR)NtCurrentTeb()->WOW32Reserved - size;
+            lParam = PtrToUlong(NtCurrentTeb()->WOW32Reserved) - size;
         }
     }
 
@@ -711,7 +711,7 @@
 }
 
 
-static UINT convert_handle_16_to_32(HANDLE16 src, unsigned int flags)
+static UINT_PTR convert_handle_16_to_32(HANDLE16 src, unsigned int flags)
 {
     HANDLE      dst;
     UINT        sz = GlobalSize16(src);
@@ -725,10 +725,10 @@
     GlobalUnlock16(src);
     GlobalUnlock(dst);
 
-    return (UINT)dst;
+    return (UINT_PTR)dst;
 }
 
-static HANDLE16 convert_handle_32_to_16(UINT src, unsigned int flags)
+static HANDLE16 convert_handle_32_to_16(UINT_PTR src, unsigned int flags)
 {
     HANDLE16    dst;
     UINT        sz = GlobalSize((HANDLE)src);
@@ -1538,7 +1538,7 @@
     case WM_DDE_POKE:
         {
             HANDLE16 lo16 = LOWORD(lParam);
-            UINT lo32 = 0;
+            UINT_PTR lo32 = 0;
             if (lo16 && !(lo32 = convert_handle_16_to_32(lo16, GMEM_DDESHARE))) break;
             lParam = PackDDElParam( msg, lo32, HIWORD(lParam) );
             ret = callback( hwnd32, msg, (WPARAM)WIN_Handle32(wParam), lParam, result, arg );
@@ -1546,8 +1546,8 @@
         break; /* FIXME don't know how to free allocated memory (handle)  !! */
     case WM_DDE_ACK:
         {
-            UINT lo = LOWORD(lParam);
-            UINT hi = HIWORD(lParam);
+            UINT_PTR lo = LOWORD(lParam);
+            UINT_PTR hi = HIWORD(lParam);
             int flag = 0;
             char buf[2];
 
@@ -1565,7 +1565,7 @@
             case 1:
                 break; /* atom, nothing to do */
             case 3:
-                MESSAGE("DDE_ACK: %x both atom and handle... choosing handle\n", hi);
+                MESSAGE("DDE_ACK: %lx both atom and handle... choosing handle\n", hi);
                 /* fall thru */
             case 2:
                 hi = convert_handle_16_to_32(hi, GMEM_DDESHARE);