Made all 16<->32 HWND conversions use explicit functions instead of
implicit type casts.
Moved a lot of 16-bit functions to the new wnd16.c file.
Changed DIALOGINFO structure handling to support 32-bit handles.
diff --git a/dlls/user/Makefile.in b/dlls/user/Makefile.in
index 0884e3e..b92b019 100644
--- a/dlls/user/Makefile.in
+++ b/dlls/user/Makefile.in
@@ -27,6 +27,7 @@
text.c \
thunk.c \
user_main.c \
+ wnd16.c \
wsprintf.c
RC_SRCS = \
diff --git a/dlls/user/controls.h b/dlls/user/controls.h
index d14fbb1..3285a89 100644
--- a/dlls/user/controls.h
+++ b/dlls/user/controls.h
@@ -99,35 +99,30 @@
extern BOOL COMBO_FlipListbox( LPHEADCOMBO, BOOL, BOOL );
-/* Dialog info structure.
- * This structure is stored into the window extra bytes (cbWndExtra).
- * sizeof(DIALOGINFO) must be <= DLGWINDOWEXTRA (=30).
- */
-#include "pshpack1.h"
-
+/* Dialog info structure */
typedef struct
{
- INT msgResult; /* 00 Last message result */
- HWINDOWPROC dlgProc; /* 04 Dialog procedure */
- LONG userInfo; /* 08 User information (for DWL_USER) */
-
- /* implementation-dependent part */
-
- HWND16 hwndFocus; /* 0c Current control with focus */
- HFONT16 hUserFont; /* 0e Dialog font */
- HMENU16 hMenu; /* 10 Dialog menu */
- WORD xBaseUnit; /* 12 Dialog units (depends on the font) */
- WORD yBaseUnit; /* 14 */
- INT idResult; /* 16 EndDialog() result / default pushbutton ID */
- UINT16 flags; /* 1a EndDialog() called for this dialog */
- HGLOBAL16 hDialogHeap; /* 1c */
+ HWND hwndFocus; /* Current control with focus */
+ HFONT hUserFont; /* Dialog font */
+ HMENU hMenu; /* Dialog menu */
+ UINT xBaseUnit; /* Dialog units (depends on the font) */
+ UINT yBaseUnit;
+ INT idResult; /* EndDialog() result / default pushbutton ID */
+ UINT flags; /* EndDialog() called for this dialog */
+ HGLOBAL16 hDialogHeap;
} DIALOGINFO;
-#include "poppack.h"
-
#define DF_END 0x0001
#define DF_OWNERENABLED 0x0002
+/* offset of DIALOGINFO ptr in dialog extra bytes */
+#define DWL_WINE_DIALOGINFO (DWL_USER+sizeof(ULONG_PTR))
+
+inline static DIALOGINFO *DIALOG_get_info( HWND hwnd )
+{
+ return (DIALOGINFO *)GetWindowLongW( hwnd, DWL_WINE_DIALOGINFO );
+}
+
extern BOOL DIALOG_Init(void);
#endif /* __WINE_CONTROLS_H */
diff --git a/dlls/user/msg16.c b/dlls/user/msg16.c
index 60f5df2..c827107 100644
--- a/dlls/user/msg16.c
+++ b/dlls/user/msg16.c
@@ -20,9 +20,10 @@
/***********************************************************************
* SendMessage (USER.111)
*/
-LRESULT WINAPI SendMessage16( HWND16 hwnd, UINT16 msg, WPARAM16 wparam, LPARAM lparam )
+LRESULT WINAPI SendMessage16( HWND16 hwnd16, UINT16 msg, WPARAM16 wparam, LPARAM lparam )
{
LRESULT result;
+ HWND hwnd = WIN_Handle32( hwnd16 );
if (hwnd != HWND_BROADCAST &&
GetWindowThreadProcessId( hwnd, NULL ) == GetCurrentThreadId())
@@ -37,12 +38,16 @@
if ((cwp = SEGPTR_NEW(CWPSTRUCT16)))
{
- cwp->hwnd = hwnd;
+ cwp->hwnd = hwnd16;
cwp->message = msg;
cwp->wParam = wparam;
cwp->lParam = lparam;
HOOK_CallHooks16( WH_CALLWNDPROC, HC_ACTION, 1, SEGPTR_GET(cwp) );
- hwnd = cwp->hwnd;
+ if (cwp->hwnd != hwnd16)
+ {
+ hwnd16 = cwp->hwnd;
+ hwnd = WIN_Handle32( hwnd16 );
+ }
msg = cwp->message;
wparam = cwp->wParam;
lparam = cwp->lParam;
@@ -50,10 +55,10 @@
}
}
- if (!(winproc = (WNDPROC16)GetWindowLong16( hwnd, GWL_WNDPROC ))) return 0;
+ if (!(winproc = (WNDPROC16)GetWindowLong16( hwnd16, GWL_WNDPROC ))) return 0;
SPY_EnterMessage( SPY_SENDMESSAGE16, hwnd, msg, wparam, lparam );
- result = CallWindowProc16( (WNDPROC16)winproc, hwnd, msg, wparam, lparam );
+ result = CallWindowProc16( (WNDPROC16)winproc, hwnd16, msg, wparam, lparam );
SPY_ExitMessage( SPY_RESULT_OK16, hwnd, msg, result, wparam, lparam );
}
else /* map to 32-bit unicode for inter-thread/process message */
@@ -73,10 +78,11 @@
/***********************************************************************
* PostMessage (USER.110)
*/
-BOOL16 WINAPI PostMessage16( HWND16 hwnd, UINT16 msg, WPARAM16 wparam, LPARAM lparam )
+BOOL16 WINAPI PostMessage16( HWND16 hwnd16, UINT16 msg, WPARAM16 wparam, LPARAM lparam )
{
WPARAM wparam32;
UINT msg32;
+ HWND hwnd = WIN_Handle32( hwnd16 );
switch (WINPROC_MapMsg16To32W( hwnd, msg, wparam, &msg32, &wparam32, &lparam ))
{
@@ -136,15 +142,16 @@
/***********************************************************************
* PeekMessage32 (USER.819)
*/
-BOOL16 WINAPI PeekMessage32_16( MSG32_16 *msg16, HWND16 hwnd,
+BOOL16 WINAPI PeekMessage32_16( MSG32_16 *msg16, HWND16 hwnd16,
UINT16 first, UINT16 last, UINT16 flags,
BOOL16 wHaveParamHigh )
{
MSG msg;
+ HWND hwnd = WIN_Handle32( hwnd16 );
if (!PeekMessageW( &msg, hwnd, first, last, flags )) return FALSE;
- msg16->msg.hwnd = msg.hwnd;
+ msg16->msg.hwnd = WIN_Handle16( msg.hwnd );
msg16->msg.lParam = msg.lParam;
msg16->msg.time = msg.time;
msg16->msg.pt.x = (INT16)msg.pt.x;
@@ -170,15 +177,16 @@
/***********************************************************************
* GetMessage32 (USER.820)
*/
-BOOL16 WINAPI GetMessage32_16( MSG32_16 *msg16, HWND16 hwnd, UINT16 first,
+BOOL16 WINAPI GetMessage32_16( MSG32_16 *msg16, HWND16 hwnd16, UINT16 first,
UINT16 last, BOOL16 wHaveParamHigh )
{
MSG msg;
+ HWND hwnd = WIN_Handle32( hwnd16 );
do
{
GetMessageW( &msg, hwnd, first, last );
- msg16->msg.hwnd = msg.hwnd;
+ msg16->msg.hwnd = WIN_Handle16( msg.hwnd );
msg16->msg.lParam = msg.lParam;
msg16->msg.time = msg.time;
msg16->msg.pt.x = (INT16)msg.pt.x;
@@ -212,7 +220,7 @@
{
MSG msg32;
- msg32.hwnd = msg->msg.hwnd;
+ msg32.hwnd = WIN_Handle32( msg->msg.hwnd );
msg32.message = msg->msg.message;
msg32.wParam = MAKEWPARAM( msg->msg.wParam, wHaveParamHigh ? msg->wParamHigh : 0 );
msg32.lParam = msg->msg.lParam;
@@ -238,6 +246,7 @@
WNDPROC16 winproc;
LONG retval;
int painting;
+ HWND hwnd = WIN_Handle32( msg->hwnd );
/* Process timer messages */
if ((msg->message == WM_TIMER) || (msg->message == WM_SYSTIMER))
@@ -247,7 +256,7 @@
/* before calling window proc, verify whether timer is still valid;
there's a slim chance that the application kills the timer
between GetMessage and DispatchMessage API calls */
- if (!TIMER_IsTimerValid(msg->hwnd, (UINT) msg->wParam, (HWINDOWPROC) msg->lParam))
+ if (!TIMER_IsTimerValid(hwnd, (UINT) msg->wParam, (HWINDOWPROC) msg->lParam))
return 0; /* invalid winproc */
return CallWindowProc16( (WNDPROC16)msg->lParam, msg->hwnd,
@@ -255,7 +264,7 @@
}
}
- if (!(wndPtr = WIN_FindWndPtr( msg->hwnd ))) return 0;
+ if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return 0;
if (!wndPtr->winproc)
{
WIN_ReleaseWndPtr( wndPtr );
@@ -266,23 +275,24 @@
if (painting) wndPtr->flags |= WIN_NEEDS_BEGINPAINT;
WIN_ReleaseWndPtr( wndPtr );
- SPY_EnterMessage( SPY_DISPATCHMESSAGE16, msg->hwnd, msg->message, msg->wParam, msg->lParam );
+ SPY_EnterMessage( SPY_DISPATCHMESSAGE16, hwnd, msg->message, msg->wParam, msg->lParam );
retval = CallWindowProc16( winproc, msg->hwnd, msg->message, msg->wParam, msg->lParam );
- SPY_ExitMessage( SPY_RESULT_OK16, msg->hwnd, msg->message, retval, msg->wParam, msg->lParam );
+ SPY_ExitMessage( SPY_RESULT_OK16, hwnd, msg->message, retval, msg->wParam, msg->lParam );
if (!painting) return retval;
- if ((wndPtr = WIN_FindWndPtr( msg->hwnd )))
+ if ((wndPtr = WIN_FindWndPtr( hwnd )))
{
if ((wndPtr->flags & WIN_NEEDS_BEGINPAINT) && wndPtr->hrgnUpdate)
{
ERR( "BeginPaint not called on WM_PAINT for hwnd %04x!\n", msg->hwnd );
wndPtr->flags &= ~WIN_NEEDS_BEGINPAINT;
+ WIN_ReleaseWndPtr( wndPtr );
/* Validate the update region to avoid infinite WM_PAINT loop */
- RedrawWindow( wndPtr->hwndSelf, NULL, 0,
+ RedrawWindow( hwnd, NULL, 0,
RDW_NOFRAME | RDW_VALIDATE | RDW_NOCHILDREN | RDW_NOINTERNALPAINT );
}
- WIN_ReleaseWndPtr( wndPtr );
+ else WIN_ReleaseWndPtr( wndPtr );
}
return retval;
}
@@ -299,7 +309,7 @@
{
MSG msg;
- msg.hwnd = msg16->msg.hwnd;
+ msg.hwnd = WIN_Handle32( msg16->msg.hwnd );
msg.message = msg16->msg.message;
msg.wParam = MAKEWPARAM( msg16->msg.wParam, msg16->wParamHigh );
msg.lParam = msg16->msg.lParam;
@@ -374,3 +384,38 @@
{
return GetInputState();
}
+
+
+/**********************************************************************
+ * TranslateAccelerator (USER.178)
+ */
+INT16 WINAPI TranslateAccelerator16( HWND16 hwnd, HACCEL16 hAccel, LPMSG16 msg )
+{
+ MSG msg32;
+
+ if (!msg) return 0;
+ msg32.message = msg->message;
+ /* msg32.hwnd not used */
+ msg32.wParam = msg->wParam;
+ msg32.lParam = msg->lParam;
+ return TranslateAccelerator( WIN_Handle32(hwnd), hAccel, &msg32 );
+}
+
+
+/**********************************************************************
+ * TranslateMDISysAccel (USER.451)
+ */
+BOOL16 WINAPI TranslateMDISysAccel16( HWND16 hwndClient, LPMSG16 msg )
+{
+ if (msg->message == WM_KEYDOWN || msg->message == WM_SYSKEYDOWN)
+ {
+ MSG msg32;
+ msg32.hwnd = WIN_Handle32(msg->hwnd);
+ msg32.message = msg->message;
+ msg32.wParam = msg->wParam;
+ msg32.lParam = msg->lParam;
+ /* MDICLIENTINFO is still the same for win32 and win16 ... */
+ return TranslateMDISysAccel( WIN_Handle32(hwndClient), &msg32 );
+ }
+ return 0;
+}
diff --git a/dlls/user/thunk.c b/dlls/user/thunk.c
index 2131d9a..ce0c4e7 100644
--- a/dlls/user/thunk.c
+++ b/dlls/user/thunk.c
@@ -8,6 +8,7 @@
#include "windef.h"
#include "wingdi.h"
#include "wine/winuser16.h"
+#include "win.h"
#include "callback.h"
/* ### start build ### */
@@ -33,7 +34,7 @@
BOOL16 WINAPI EnumChildWindows16( HWND16 parent, WNDENUMPROC16 func, LPARAM lParam )
{
DECL_THUNK( thunk, func, THUNK_CallTo16_word_wl );
- return EnumChildWindows( parent, (WNDENUMPROC)&thunk, lParam );
+ return EnumChildWindows( WIN_Handle32(parent), (WNDENUMPROC)&thunk, lParam );
}
diff --git a/dlls/user/user.spec b/dlls/user/user.spec
index 84c741d..a4eb68b 100644
--- a/dlls/user/user.spec
+++ b/dlls/user/user.spec
@@ -22,7 +22,7 @@
16 pascal16 ClipCursor(ptr) ClipCursor16
17 pascal16 GetCursorPos(ptr) GetCursorPos16
18 pascal16 SetCapture(word) SetCapture16
-19 pascal16 ReleaseCapture() ReleaseCapture
+19 pascal16 ReleaseCapture() ReleaseCapture16
20 pascal16 SetDoubleClickTime(word) SetDoubleClickTime16
21 pascal16 GetDoubleClickTime() GetDoubleClickTime16
22 pascal16 SetFocus(word) SetFocus16
diff --git a/dlls/user/wnd16.c b/dlls/user/wnd16.c
new file mode 100644
index 0000000..c4ac2fc
--- /dev/null
+++ b/dlls/user/wnd16.c
@@ -0,0 +1,1506 @@
+/*
+ * 16-bit windowing functions
+ *
+ * Copyright 2001 Alexandre Julliard
+ */
+
+#include "wine/winuser16.h"
+#include "user.h"
+#include "win.h"
+#include "stackframe.h"
+
+static HWND16 hwndSysModal;
+
+/* convert insert after window handle to 32-bit */
+inline static HWND full_insert_after_hwnd( HWND16 hwnd )
+{
+ HWND ret = WIN_Handle32( hwnd );
+ if (ret == (HWND)0xffff) ret = HWND_TOPMOST;
+ return ret;
+}
+
+/**************************************************************************
+ * MessageBox (USER.1)
+ */
+INT16 WINAPI MessageBox16( HWND16 hwnd, LPCSTR text, LPCSTR title, UINT16 type )
+{
+ return MessageBoxA( WIN_Handle32(hwnd), text, title, type );
+}
+
+
+/**************************************************************************
+ * KillTimer (USER.12)
+ */
+BOOL16 WINAPI KillTimer16( HWND16 hwnd, UINT16 id )
+{
+ return KillTimer( WIN_Handle32(hwnd), id );
+}
+
+
+/**************************************************************************
+ * SetCapture (USER.18)
+ */
+HWND16 WINAPI SetCapture16( HWND16 hwnd )
+{
+ return WIN_Handle16( SetCapture( WIN_Handle32(hwnd) ));
+}
+
+
+/**************************************************************************
+ * ReleaseCapture (USER.19)
+ */
+BOOL16 WINAPI ReleaseCapture16(void)
+{
+ return ReleaseCapture();
+}
+
+
+/**************************************************************************
+ * SetFocus (USER.22)
+ */
+HWND16 WINAPI SetFocus16( HWND16 hwnd )
+{
+ return WIN_Handle16( SetFocus( WIN_Handle32(hwnd) ));
+}
+
+
+/**************************************************************************
+ * GetFocus (USER.23)
+ */
+HWND16 WINAPI GetFocus16(void)
+{
+ return WIN_Handle16( GetFocus() );
+}
+
+
+/**************************************************************************
+ * RemoveProp (USER.24)
+ */
+HANDLE16 WINAPI RemoveProp16( HWND16 hwnd, LPCSTR str )
+{
+ return (HANDLE16)RemovePropA( WIN_Handle32(hwnd), str );
+}
+
+
+/**************************************************************************
+ * GetProp (USER.25)
+ */
+HANDLE16 WINAPI GetProp16( HWND16 hwnd, LPCSTR str )
+{
+ return (HANDLE16)GetPropA( WIN_Handle32(hwnd), str );
+}
+
+
+/**************************************************************************
+ * SetProp (USER.26)
+ */
+BOOL16 WINAPI SetProp16( HWND16 hwnd, LPCSTR str, HANDLE16 handle )
+{
+ return SetPropA( WIN_Handle32(hwnd), str, handle );
+}
+
+
+/**************************************************************************
+ * ClientToScreen (USER.28)
+ */
+void WINAPI ClientToScreen16( HWND16 hwnd, LPPOINT16 lppnt )
+{
+ MapWindowPoints16( hwnd, 0, lppnt, 1 );
+}
+
+
+/**************************************************************************
+ * ScreenToClient (USER.29)
+ */
+void WINAPI ScreenToClient16( HWND16 hwnd, LPPOINT16 lppnt )
+{
+ MapWindowPoints16( 0, hwnd, lppnt, 1 );
+}
+
+
+/**************************************************************************
+ * WindowFromPoint (USER.30)
+ */
+HWND16 WINAPI WindowFromPoint16( POINT16 pt )
+{
+ POINT pt32;
+
+ CONV_POINT16TO32( &pt, &pt32 );
+ return WIN_Handle16( WindowFromPoint( pt32 ) );
+}
+
+
+/**************************************************************************
+ * IsIconic (USER.31)
+ */
+BOOL16 WINAPI IsIconic16(HWND16 hwnd)
+{
+ return IsIconic( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * GetWindowRect (USER.32)
+ */
+void WINAPI GetWindowRect16( HWND16 hwnd, LPRECT16 rect )
+{
+ RECT rect32;
+
+ GetWindowRect( WIN_Handle32(hwnd), &rect32 );
+ rect->left = rect32.left;
+ rect->top = rect32.top;
+ rect->right = rect32.right;
+ rect->bottom = rect32.bottom;
+}
+
+
+/**************************************************************************
+ * GetClientRect (USER.33)
+ */
+void WINAPI GetClientRect16( HWND16 hwnd, LPRECT16 rect )
+{
+ RECT rect32;
+
+ GetClientRect( WIN_Handle32(hwnd), &rect32 );
+ rect->left = rect32.left;
+ rect->top = rect32.top;
+ rect->right = rect32.right;
+ rect->bottom = rect32.bottom;
+}
+
+
+/**************************************************************************
+ * EnableWindow (USER.34)
+ */
+BOOL16 WINAPI EnableWindow16( HWND16 hwnd, BOOL16 enable )
+{
+ return EnableWindow( WIN_Handle32(hwnd), enable );
+}
+
+
+/**************************************************************************
+ * IsWindowEnabled (USER.35)
+ */
+BOOL16 WINAPI IsWindowEnabled16(HWND16 hwnd)
+{
+ return IsWindowEnabled( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * GetWindowText (USER.36)
+ */
+INT16 WINAPI GetWindowText16( HWND16 hwnd, SEGPTR lpString, INT16 nMaxCount )
+{
+ return SendMessage16( hwnd, WM_GETTEXT, nMaxCount, lpString );
+}
+
+
+/**************************************************************************
+ * SetWindowText (USER.37)
+ */
+BOOL16 WINAPI SetWindowText16( HWND16 hwnd, SEGPTR lpString )
+{
+ return SendMessage16( hwnd, WM_SETTEXT, 0, (LPARAM)lpString );
+}
+
+
+/**************************************************************************
+ * GetWindowTextLength (USER.38)
+ */
+INT16 WINAPI GetWindowTextLength16( HWND16 hwnd )
+{
+ return SendMessage16( hwnd, WM_GETTEXTLENGTH, 0, 0 );
+}
+
+
+/**************************************************************************
+ * ShowWindow (USER.42)
+ */
+BOOL16 WINAPI ShowWindow16( HWND16 hwnd, INT16 cmd )
+{
+ return ShowWindow( WIN_Handle32(hwnd), cmd );
+}
+
+
+/**************************************************************************
+ * CloseWindow (USER.43)
+ */
+BOOL16 WINAPI CloseWindow16( HWND16 hwnd )
+{
+ return CloseWindow( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * OpenIcon (USER.44)
+ */
+BOOL16 WINAPI OpenIcon16( HWND16 hwnd )
+{
+ return OpenIcon( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * BringWindowToTop (USER.45)
+ */
+BOOL16 WINAPI BringWindowToTop16( HWND16 hwnd )
+{
+ return BringWindowToTop( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * GetParent (USER.46)
+ */
+HWND16 WINAPI GetParent16( HWND16 hwnd )
+{
+ return WIN_Handle16( GetParent( WIN_Handle32(hwnd) ));
+}
+
+
+/**************************************************************************
+ * IsWindow (USER.47)
+ */
+BOOL16 WINAPI IsWindow16( HWND16 hwnd )
+{
+ CURRENT_STACK16->es = USER_HeapSel;
+ /* don't use WIN_Handle32 here, we don't care about the full handle */
+ return IsWindow( (HWND)(ULONG_PTR)hwnd );
+}
+
+
+/**************************************************************************
+ * IsChild (USER.48)
+ */
+BOOL16 WINAPI IsChild16( HWND16 parent, HWND16 child )
+{
+ return IsChild( WIN_Handle32(parent), WIN_Handle32(child) );
+}
+
+
+/**************************************************************************
+ * IsWindowVisible (USER.49)
+ */
+BOOL16 WINAPI IsWindowVisible16( HWND16 hwnd )
+{
+ return IsWindowVisible( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * FindWindow (USER.50)
+ */
+HWND16 WINAPI FindWindow16( LPCSTR className, LPCSTR title )
+{
+ return WIN_Handle16( FindWindowA( className, title ));
+}
+
+
+/**************************************************************************
+ * DestroyWindow (USER.53)
+ */
+BOOL16 WINAPI DestroyWindow16( HWND16 hwnd )
+{
+ return DestroyWindow( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * MoveWindow (USER.56)
+ */
+BOOL16 WINAPI MoveWindow16( HWND16 hwnd, INT16 x, INT16 y, INT16 cx, INT16 cy, BOOL16 repaint )
+{
+ return MoveWindow( WIN_Handle32(hwnd), x, y, cx, cy, repaint );
+}
+
+
+/**************************************************************************
+ * GetClassName (USER.58)
+ */
+INT16 WINAPI GetClassName16( HWND16 hwnd, LPSTR buffer, INT16 count )
+{
+ return GetClassNameA( WIN_Handle32(hwnd), buffer, count );
+}
+
+
+/**************************************************************************
+ * SetActiveWindow (USER.59)
+ */
+HWND16 WINAPI SetActiveWindow16( HWND16 hwnd )
+{
+ return WIN_Handle16( SetActiveWindow( WIN_Handle32(hwnd) ));
+}
+
+
+/**************************************************************************
+ * GetActiveWindow (USER.60)
+ */
+HWND16 WINAPI GetActiveWindow16(void)
+{
+ return WIN_Handle16( GetActiveWindow() );
+}
+
+
+/**************************************************************************
+ * ScrollWindow (USER.61)
+ */
+void WINAPI ScrollWindow16( HWND16 hwnd, INT16 dx, INT16 dy, const RECT16 *rect,
+ const RECT16 *clipRect )
+{
+ RECT rect32, clipRect32;
+
+ if (rect) CONV_RECT16TO32( rect, &rect32 );
+ if (clipRect) CONV_RECT16TO32( clipRect, &clipRect32 );
+ ScrollWindow( WIN_Handle32(hwnd), dx, dy, rect ? &rect32 : NULL,
+ clipRect ? &clipRect32 : NULL );
+}
+
+
+/**************************************************************************
+ * SetScrollPos (USER.62)
+ */
+INT16 WINAPI SetScrollPos16( HWND16 hwnd, INT16 nBar, INT16 nPos, BOOL16 redraw )
+{
+ return SetScrollPos( WIN_Handle32(hwnd), nBar, nPos, redraw );
+}
+
+
+/**************************************************************************
+ * GetScrollPos (USER.63)
+ */
+INT16 WINAPI GetScrollPos16( HWND16 hwnd, INT16 nBar )
+{
+ return GetScrollPos( WIN_Handle32(hwnd), nBar );
+}
+
+
+/**************************************************************************
+ * SetScrollRange (USER.64)
+ */
+void WINAPI SetScrollRange16( HWND16 hwnd, INT16 nBar, INT16 MinVal, INT16 MaxVal, BOOL16 redraw )
+{
+ /* Invalid range -> range is set to (0,0) */
+ if ((INT)MaxVal - (INT)MinVal > 0x7fff) MinVal = MaxVal = 0;
+ SetScrollRange( WIN_Handle32(hwnd), nBar, MinVal, MaxVal, redraw );
+}
+
+
+/**************************************************************************
+ * GetScrollRange (USER.65)
+ */
+BOOL16 WINAPI GetScrollRange16( HWND16 hwnd, INT16 nBar, LPINT16 lpMin, LPINT16 lpMax)
+{
+ INT min, max;
+ BOOL ret = GetScrollRange( WIN_Handle32(hwnd), nBar, &min, &max );
+ if (lpMin) *lpMin = min;
+ if (lpMax) *lpMax = max;
+ return ret;
+}
+
+
+/**************************************************************************
+ * GetDC (USER.66)
+ */
+HDC16 WINAPI GetDC16( HWND16 hwnd )
+{
+ return (HDC16)GetDC( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * GetWindowDC (USER.67)
+ */
+HDC16 WINAPI GetWindowDC16( HWND16 hwnd )
+{
+ return GetDCEx16( hwnd, 0, DCX_USESTYLE | DCX_WINDOW );
+}
+
+
+/**************************************************************************
+ * ReleaseDC (USER.68)
+ */
+INT16 WINAPI ReleaseDC16( HWND16 hwnd, HDC16 hdc )
+{
+ return (INT16)ReleaseDC( WIN_Handle32(hwnd), hdc );
+}
+
+
+/**************************************************************************
+ * EndDialog (USER.88)
+ */
+BOOL16 WINAPI EndDialog16( HWND16 hwnd, INT16 retval )
+{
+ return EndDialog( WIN_Handle32(hwnd), retval );
+}
+
+
+/**************************************************************************
+ * GetDlgItem (USER.91)
+ */
+HWND16 WINAPI GetDlgItem16( HWND16 hwndDlg, INT16 id )
+{
+ return WIN_Handle16( GetDlgItem( WIN_Handle32(hwndDlg), id ));
+}
+
+
+/**************************************************************************
+ * SetDlgItemText (USER.92)
+ */
+void WINAPI SetDlgItemText16( HWND16 hwnd, INT16 id, SEGPTR lpString )
+{
+ SendDlgItemMessage16( hwnd, id, WM_SETTEXT, 0, (LPARAM)lpString );
+}
+
+
+/**************************************************************************
+ * GetDlgItemText (USER.93)
+ */
+INT16 WINAPI GetDlgItemText16( HWND16 hwnd, INT16 id, SEGPTR str, UINT16 len )
+{
+ return (INT16)SendDlgItemMessage16( hwnd, id, WM_GETTEXT, len, (LPARAM)str );
+}
+
+
+/**************************************************************************
+ * SetDlgItemInt (USER.94)
+ */
+void WINAPI SetDlgItemInt16( HWND16 hwnd, INT16 id, UINT16 value, BOOL16 fSigned )
+{
+ SetDlgItemInt( WIN_Handle32(hwnd), (UINT)(UINT16)id, value, fSigned );
+}
+
+
+/**************************************************************************
+ * GetDlgItemInt (USER.95)
+ */
+UINT16 WINAPI GetDlgItemInt16( HWND16 hwnd, INT16 id, BOOL16 *translated, BOOL16 fSigned )
+{
+ UINT result;
+ BOOL ok;
+
+ if (translated) *translated = FALSE;
+ result = GetDlgItemInt( WIN_Handle32(hwnd), (UINT)(UINT16)id, &ok, fSigned );
+ if (!ok) return 0;
+ if (fSigned)
+ {
+ if (((INT)result < -32767) || ((INT)result > 32767)) return 0;
+ }
+ else
+ {
+ if (result > 65535) return 0;
+ }
+ if (translated) *translated = TRUE;
+ return (UINT16)result;
+}
+
+
+/**************************************************************************
+ * CheckRadioButton (USER.96)
+ */
+BOOL16 WINAPI CheckRadioButton16( HWND16 hwndDlg, UINT16 firstID,
+ UINT16 lastID, UINT16 checkID )
+{
+ return CheckRadioButton( WIN_Handle32(hwndDlg), firstID, lastID, checkID );
+}
+
+
+/**************************************************************************
+ * CheckDlgButton (USER.97)
+ */
+BOOL16 WINAPI CheckDlgButton16( HWND16 hwnd, INT16 id, UINT16 check )
+{
+ SendDlgItemMessage16( hwnd, id, BM_SETCHECK, check, 0 );
+ return TRUE;
+}
+
+
+/**************************************************************************
+ * IsDlgButtonChecked (USER.98)
+ */
+UINT16 WINAPI IsDlgButtonChecked16( HWND16 hwnd, UINT16 id )
+{
+ return (UINT16)SendDlgItemMessage16( hwnd, id, BM_GETCHECK, 0, 0 );
+}
+
+
+/**************************************************************************
+ * DlgDirSelect (USER.99)
+ */
+BOOL16 WINAPI DlgDirSelect16( HWND16 hwnd, LPSTR str, INT16 id )
+{
+ return DlgDirSelectEx16( hwnd, str, 128, id );
+}
+
+
+/**************************************************************************
+ * DlgDirList (USER.100)
+ */
+INT16 WINAPI DlgDirList16( HWND16 hDlg, LPSTR spec, INT16 idLBox,
+ INT16 idStatic, UINT16 attrib )
+{
+ /* according to Win16 docs, DDL_DRIVES should make DDL_EXCLUSIVE
+ * be set automatically (this is different in Win32, and
+ * DIALOG_DlgDirList sends Win32 messages to the control,
+ * so do it here) */
+ if (attrib & DDL_DRIVES) attrib |= DDL_EXCLUSIVE;
+ return DlgDirListA( WIN_Handle32(hDlg), spec, idLBox, idStatic, attrib );
+}
+
+
+/**************************************************************************
+ * SendDlgItemMessage (USER.101)
+ */
+LRESULT WINAPI SendDlgItemMessage16( HWND16 hwnd, INT16 id, UINT16 msg,
+ WPARAM16 wParam, LPARAM lParam )
+{
+ HWND16 hwndCtrl = GetDlgItem16( hwnd, id );
+ if (hwndCtrl) return SendMessage16( hwndCtrl, msg, wParam, lParam );
+ else return 0;
+}
+
+
+/**************************************************************************
+ * MapDialogRect (USER.103)
+ */
+void WINAPI MapDialogRect16( HWND16 hwnd, LPRECT16 rect )
+{
+ RECT rect32;
+ MapDialogRect( WIN_Handle32(hwnd), &rect32 );
+ rect->left = rect32.left;
+ rect->right = rect32.right;
+ rect->top = rect32.top;
+ rect->bottom = rect32.bottom;
+}
+
+
+/**************************************************************************
+ * FlashWindow (USER.105)
+ */
+BOOL16 WINAPI FlashWindow16( HWND16 hwnd, BOOL16 bInvert )
+{
+ return FlashWindow( WIN_Handle32(hwnd), bInvert );
+}
+
+
+/**************************************************************************
+ * WindowFromDC (USER.117)
+ */
+HWND16 WINAPI WindowFromDC16( HDC16 hDC )
+{
+ return WIN_Handle16( WindowFromDC( hDC ) );
+}
+
+
+/**************************************************************************
+ * UpdateWindow (USER.124)
+ */
+void WINAPI UpdateWindow16( HWND16 hwnd )
+{
+ RedrawWindow16( hwnd, NULL, 0, RDW_UPDATENOW | RDW_ALLCHILDREN );
+}
+
+
+/**************************************************************************
+ * InvalidateRect (USER.125)
+ */
+void WINAPI InvalidateRect16( HWND16 hwnd, const RECT16 *rect, BOOL16 erase )
+{
+ RedrawWindow16( hwnd, rect, 0, RDW_INVALIDATE | (erase ? RDW_ERASE : 0) );
+}
+
+
+/**************************************************************************
+ * InvalidateRgn (USER.126)
+ */
+void WINAPI InvalidateRgn16( HWND16 hwnd, HRGN16 hrgn, BOOL16 erase )
+{
+ RedrawWindow16( hwnd, NULL, hrgn, RDW_INVALIDATE | (erase ? RDW_ERASE : 0) );
+}
+
+
+/**************************************************************************
+ * ValidateRect (USER.127)
+ */
+void WINAPI ValidateRect16( HWND16 hwnd, const RECT16 *rect )
+{
+ RedrawWindow16( hwnd, rect, 0, RDW_VALIDATE | RDW_NOCHILDREN );
+}
+
+
+/**************************************************************************
+ * ValidateRgn (USER.128)
+ */
+void WINAPI ValidateRgn16( HWND16 hwnd, HRGN16 hrgn )
+{
+ RedrawWindow16( hwnd, NULL, hrgn, RDW_VALIDATE | RDW_NOCHILDREN );
+}
+
+
+/**************************************************************************
+ * GetClassWord (USER.129)
+ */
+WORD WINAPI GetClassWord16( HWND16 hwnd, INT16 offset )
+{
+ return GetClassWord( WIN_Handle32(hwnd), offset );
+}
+
+
+/**************************************************************************
+ * SetClassWord (USER.130)
+ */
+WORD WINAPI SetClassWord16( HWND16 hwnd, INT16 offset, WORD newval )
+{
+ return SetClassWord( WIN_Handle32(hwnd), offset, newval );
+}
+
+
+/**************************************************************************
+ * GetWindowWord (USER.133)
+ */
+WORD WINAPI GetWindowWord16( HWND16 hwnd, INT16 offset )
+{
+ return GetWindowWord( WIN_Handle32(hwnd), offset );
+}
+
+
+/**************************************************************************
+ * SetWindowWord (USER.134)
+ */
+WORD WINAPI SetWindowWord16( HWND16 hwnd, INT16 offset, WORD newval )
+{
+ return SetWindowWord( WIN_Handle32(hwnd), offset, newval );
+}
+
+
+/**************************************************************************
+ * OpenClipboard (USER.137)
+ */
+BOOL16 WINAPI OpenClipboard16( HWND16 hwnd )
+{
+ return OpenClipboard( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * GetClipboardOwner (USER.140)
+ */
+HWND16 WINAPI GetClipboardOwner16(void)
+{
+ return WIN_Handle16( GetClipboardOwner() );
+}
+
+
+/**************************************************************************
+ * SetClipboardViewer (USER.147)
+ */
+HWND16 WINAPI SetClipboardViewer16( HWND16 hwnd )
+{
+ return WIN_Handle16( SetClipboardViewer( WIN_Handle32(hwnd) ));
+}
+
+
+/**************************************************************************
+ * GetClipboardViewer (USER.148)
+ */
+HWND16 WINAPI GetClipboardViewer16(void)
+{
+ return WIN_Handle16( GetClipboardViewer() );
+}
+
+
+/**************************************************************************
+ * ChangeClipboardChain (USER.149)
+ */
+BOOL16 WINAPI ChangeClipboardChain16(HWND16 hwnd, HWND16 hwndNext)
+{
+ return ChangeClipboardChain( WIN_Handle32(hwnd), WIN_Handle32(hwndNext) );
+}
+
+
+/**************************************************************************
+ * GetSystemMenu (USER.156)
+ */
+HMENU16 WINAPI GetSystemMenu16( HWND16 hwnd, BOOL16 revert )
+{
+ return GetSystemMenu( WIN_Handle32(hwnd), revert );
+}
+
+
+/**************************************************************************
+ * GetMenu (USER.157)
+ */
+HMENU16 WINAPI GetMenu16( HWND16 hwnd )
+{
+ return GetMenu( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * SetMenu (USER.158)
+ */
+BOOL16 WINAPI SetMenu16( HWND16 hwnd, HMENU16 hMenu )
+{
+ return SetMenu( WIN_Handle32(hwnd), hMenu );
+}
+
+
+/**************************************************************************
+ * DrawMenuBar (USER.160)
+ */
+void WINAPI DrawMenuBar16( HWND16 hwnd )
+{
+ DrawMenuBar( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * HiliteMenuItem (USER.162)
+ */
+BOOL16 WINAPI HiliteMenuItem16( HWND16 hwnd, HMENU16 hMenu, UINT16 id, UINT16 wHilite )
+{
+ return HiliteMenuItem( WIN_Handle32(hwnd), hMenu, id, wHilite );
+}
+
+
+/**************************************************************************
+ * CreateCaret (USER.163)
+ */
+void WINAPI CreateCaret16( HWND16 hwnd, HBITMAP16 bitmap, INT16 width, INT16 height )
+{
+ CreateCaret( WIN_Handle32(hwnd), bitmap, width, height );
+}
+
+
+/**************************************************************************
+ * HideCaret (USER.166)
+ */
+void WINAPI HideCaret16( HWND16 hwnd )
+{
+ HideCaret( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * ShowCaret (USER.167)
+ */
+void WINAPI ShowCaret16( HWND16 hwnd )
+{
+ ShowCaret( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * ArrangeIconicWindows (USER.170)
+ */
+UINT16 WINAPI ArrangeIconicWindows16( HWND16 parent)
+{
+ return ArrangeIconicWindows( WIN_Handle32(parent) );
+}
+
+
+/**************************************************************************
+ * SwitchToThisWindow (USER.172)
+ */
+void WINAPI SwitchToThisWindow16( HWND16 hwnd, BOOL16 restore )
+{
+ SwitchToThisWindow( WIN_Handle32(hwnd), restore );
+}
+
+
+/**************************************************************************
+ * KillSystemTimer (USER.182)
+ */
+BOOL16 WINAPI KillSystemTimer16( HWND16 hwnd, UINT16 id )
+{
+ return KillSystemTimer( WIN_Handle32(hwnd), id );
+}
+
+
+/**************************************************************************
+ * SetSysModalWindow (USER.188)
+ */
+HWND16 WINAPI SetSysModalWindow16( HWND16 hwnd )
+{
+ HWND16 old = hwndSysModal;
+ hwndSysModal = hwnd;
+ return old;
+}
+
+
+/**************************************************************************
+ * GetSysModalWindow (USER.189)
+ */
+HWND16 WINAPI GetSysModalWindow16(void)
+{
+ return hwndSysModal;
+}
+
+
+/**************************************************************************
+ * GetUpdateRect (USER.190)
+ */
+BOOL16 WINAPI GetUpdateRect16( HWND16 hwnd, LPRECT16 rect, BOOL16 erase )
+{
+ RECT r;
+ BOOL16 ret;
+
+ if (!rect) return GetUpdateRect( WIN_Handle32(hwnd), NULL, erase );
+ ret = GetUpdateRect( WIN_Handle32(hwnd), &r, erase );
+ CONV_RECT32TO16( &r, rect );
+ return ret;
+}
+
+
+/**************************************************************************
+ * ChildWindowFromPoint (USER.191)
+ */
+HWND16 WINAPI ChildWindowFromPoint16( HWND16 hwndParent, POINT16 pt )
+{
+ POINT pt32;
+ CONV_POINT16TO32( &pt, &pt32 );
+ return WIN_Handle16( ChildWindowFromPoint( WIN_Handle32(hwndParent), pt32 ));
+}
+
+
+/**************************************************************************
+ * DlgDirSelectComboBox (USER.194)
+ */
+BOOL16 WINAPI DlgDirSelectComboBox16( HWND16 hwnd, LPSTR str, INT16 id )
+{
+ return DlgDirSelectComboBoxEx16( hwnd, str, 128, id );
+}
+
+
+/**************************************************************************
+ * DlgDirListComboBox (USER.195)
+ */
+INT16 WINAPI DlgDirListComboBox16( HWND16 hDlg, LPSTR spec, INT16 idCBox,
+ INT16 idStatic, UINT16 attrib )
+{
+ return DlgDirListComboBoxA( WIN_Handle32(hDlg), spec, idCBox, idStatic, attrib );
+}
+
+
+/**************************************************************************
+ * GetNextDlgGroupItem (USER.227)
+ */
+HWND16 WINAPI GetNextDlgGroupItem16( HWND16 hwndDlg, HWND16 hwndCtrl,
+ BOOL16 fPrevious )
+{
+ return WIN_Handle16( GetNextDlgGroupItem( WIN_Handle32(hwndDlg),
+ WIN_Handle32(hwndCtrl), fPrevious ));
+}
+
+
+/**************************************************************************
+ * GetNextDlgTabItem (USER.228)
+ */
+HWND16 WINAPI GetNextDlgTabItem16( HWND16 hwndDlg, HWND16 hwndCtrl,
+ BOOL16 fPrevious )
+{
+ return WIN_Handle16( GetNextDlgTabItem( WIN_Handle32(hwndDlg),
+ WIN_Handle32(hwndCtrl), fPrevious ));
+}
+
+
+/**************************************************************************
+ * GetTopWindow (USER.229)
+ */
+HWND16 WINAPI GetTopWindow16( HWND16 hwnd )
+{
+ return WIN_Handle16( GetTopWindow( WIN_Handle32(hwnd) ));
+}
+
+
+/**************************************************************************
+ * GetNextWindow (USER.230)
+ */
+HWND16 WINAPI GetNextWindow16( HWND16 hwnd, WORD flag )
+{
+ if ((flag != GW_HWNDNEXT) && (flag != GW_HWNDPREV)) return 0;
+ return GetWindow16( hwnd, flag );
+}
+
+
+/**************************************************************************
+ * SetWindowPos (USER.232)
+ */
+BOOL16 WINAPI SetWindowPos16( HWND16 hwnd, HWND16 hwndInsertAfter,
+ INT16 x, INT16 y, INT16 cx, INT16 cy, WORD flags)
+{
+ return SetWindowPos( WIN_Handle32(hwnd), full_insert_after_hwnd(hwndInsertAfter),
+ x, y, cx, cy, flags );
+}
+
+
+/**************************************************************************
+ * SetParent (USER.233)
+ */
+HWND16 WINAPI SetParent16( HWND16 hwndChild, HWND16 hwndNewParent )
+{
+ return WIN_Handle16( SetParent( WIN_Handle32(hwndChild), WIN_Handle32(hwndNewParent) ));
+}
+
+
+/**************************************************************************
+ * GetCapture (USER.236)
+ */
+HWND16 WINAPI GetCapture16(void)
+{
+ return WIN_Handle16( GetCapture() );
+}
+
+
+/**************************************************************************
+ * GetUpdateRgn (USER.237)
+ */
+INT16 WINAPI GetUpdateRgn16( HWND16 hwnd, HRGN16 hrgn, BOOL16 erase )
+{
+ return GetUpdateRgn( WIN_Handle32(hwnd), hrgn, erase );
+}
+
+
+/**************************************************************************
+ * ExcludeUpdateRgn (USER.238)
+ */
+INT16 WINAPI ExcludeUpdateRgn16( HDC16 hdc, HWND16 hwnd )
+{
+ return ExcludeUpdateRgn( hdc, WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * GetOpenClipboardWindow (USER.248)
+ */
+HWND16 WINAPI GetOpenClipboardWindow16(void)
+{
+ return WIN_Handle16( GetOpenClipboardWindow() );
+}
+
+
+/**************************************************************************
+ * BeginDeferWindowPos (USER.259)
+ */
+HDWP16 WINAPI BeginDeferWindowPos16( INT16 count )
+{
+ return BeginDeferWindowPos( count );
+}
+
+
+/**************************************************************************
+ * DeferWindowPos (USER.260)
+ */
+HDWP16 WINAPI DeferWindowPos16( HDWP16 hdwp, HWND16 hwnd, HWND16 hwndAfter,
+ INT16 x, INT16 y, INT16 cx, INT16 cy,
+ UINT16 flags )
+{
+ return DeferWindowPos( hdwp, WIN_Handle32(hwnd), full_insert_after_hwnd(hwndAfter),
+ x, y, cx, cy, flags );
+}
+
+
+/**************************************************************************
+ * EndDeferWindowPos (USER.261)
+ */
+BOOL16 WINAPI EndDeferWindowPos16( HDWP16 hdwp )
+{
+ return EndDeferWindowPos( hdwp );
+}
+
+
+/**************************************************************************
+ * GetWindow (USER.262)
+ */
+HWND16 WINAPI GetWindow16( HWND16 hwnd, WORD rel )
+{
+ return WIN_Handle16( GetWindow( WIN_Handle32(hwnd), rel ) );
+}
+
+
+/**************************************************************************
+ * ShowOwnedPopups (USER.265)
+ */
+void WINAPI ShowOwnedPopups16( HWND16 owner, BOOL16 fShow )
+{
+ ShowOwnedPopups( WIN_Handle32(owner), fShow );
+}
+
+
+/**************************************************************************
+ * ShowScrollBar (USER.267)
+ */
+void WINAPI ShowScrollBar16( HWND16 hwnd, INT16 nBar, BOOL16 fShow )
+{
+ ShowScrollBar( WIN_Handle32(hwnd), nBar, fShow );
+}
+
+
+/**************************************************************************
+ * IsZoomed (USER.272)
+ */
+BOOL16 WINAPI IsZoomed16(HWND16 hwnd)
+{
+ return IsZoomed( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * GetDlgCtrlID (USER.277)
+ */
+INT16 WINAPI GetDlgCtrlID16( HWND16 hwnd )
+{
+ return GetDlgCtrlID( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * GetDesktopHwnd (USER.278)
+ *
+ * Exactly the same thing as GetDesktopWindow(), but not documented.
+ * Don't ask me why...
+ */
+HWND16 WINAPI GetDesktopHwnd16(void)
+{
+ return GetDesktopWindow16();
+}
+
+
+/**************************************************************************
+ * SetSystemMenu (USER.280)
+ */
+BOOL16 WINAPI SetSystemMenu16( HWND16 hwnd, HMENU16 hMenu )
+{
+ return SetSystemMenu( WIN_Handle32(hwnd), hMenu );
+}
+
+
+/**************************************************************************
+ * GetDesktopWindow (USER.286)
+ */
+HWND16 WINAPI GetDesktopWindow16(void)
+{
+ return WIN_Handle16( GetDesktopWindow() );
+}
+
+
+/**************************************************************************
+ * GetLastActivePopup (USER.287)
+ */
+HWND16 WINAPI GetLastActivePopup16( HWND16 hwnd )
+{
+ return WIN_Handle16( GetLastActivePopup( WIN_Handle32(hwnd) ));
+}
+
+
+/**************************************************************************
+ * RedrawWindow (USER.290)
+ */
+BOOL16 WINAPI RedrawWindow16( HWND16 hwnd, const RECT16 *rectUpdate,
+ HRGN16 hrgnUpdate, UINT16 flags )
+{
+ if (rectUpdate)
+ {
+ RECT r;
+ CONV_RECT16TO32( rectUpdate, &r );
+ return RedrawWindow( WIN_Handle32(hwnd), &r, hrgnUpdate, flags );
+ }
+ return RedrawWindow( WIN_Handle32(hwnd), NULL, hrgnUpdate, flags );
+}
+
+
+/**************************************************************************
+ * LockWindowUpdate (USER.294)
+ */
+BOOL16 WINAPI LockWindowUpdate16( HWND16 hwnd )
+{
+ return LockWindowUpdate( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * ScrollWindowEx (USER.319)
+ */
+INT16 WINAPI ScrollWindowEx16( HWND16 hwnd, INT16 dx, INT16 dy,
+ const RECT16 *rect, const RECT16 *clipRect,
+ HRGN16 hrgnUpdate, LPRECT16 rcUpdate,
+ UINT16 flags )
+{
+ RECT rect32, clipRect32, rcUpdate32;
+ BOOL16 ret;
+
+ if (rect) CONV_RECT16TO32( rect, &rect32 );
+ if (clipRect) CONV_RECT16TO32( clipRect, &clipRect32 );
+ ret = ScrollWindowEx( WIN_Handle32(hwnd), dx, dy, rect ? &rect32 : NULL,
+ clipRect ? &clipRect32 : NULL, hrgnUpdate,
+ (rcUpdate) ? &rcUpdate32 : NULL, flags );
+ if (rcUpdate) CONV_RECT32TO16( &rcUpdate32, rcUpdate );
+ return ret;
+}
+
+
+/**************************************************************************
+ * FillWindow (USER.324)
+ */
+void WINAPI FillWindow16( HWND16 hwndParent, HWND16 hwnd, HDC16 hdc, HBRUSH16 hbrush )
+{
+ RECT rect;
+ RECT16 rc16;
+ GetClientRect( WIN_Handle32(hwnd), &rect );
+ DPtoLP( hdc, (LPPOINT)&rect, 2 );
+ CONV_RECT32TO16( &rect, &rc16 );
+ PaintRect16( hwndParent, hwnd, hdc, hbrush, &rc16 );
+}
+
+
+/**************************************************************************
+ * PaintRect (USER.325)
+ */
+void WINAPI PaintRect16( HWND16 hwndParent, HWND16 hwnd, HDC16 hdc,
+ HBRUSH16 hbrush, const RECT16 *rect)
+{
+ if (hbrush <= CTLCOLOR_STATIC)
+ {
+ HWND parent = WIN_Handle32(hwndParent), hwnd32 = WIN_Handle32(hwnd);
+
+ if (!parent) return;
+ hbrush = SendMessageW( parent, WM_CTLCOLORMSGBOX + hbrush, (WPARAM)hdc, (LPARAM)hwnd32 );
+ if (!hbrush) hbrush = DefWindowProcW( parent, WM_CTLCOLORMSGBOX + hbrush,
+ (WPARAM)hdc, (LPARAM)hwnd32 );
+ }
+ if (hbrush) FillRect16( hdc, rect, hbrush );
+}
+
+
+/**************************************************************************
+ * GetControlBrush (USER.326)
+ */
+HBRUSH16 WINAPI GetControlBrush16( HWND16 hwnd, HDC16 hdc, UINT16 ctlType )
+{
+ HBRUSH16 ret;
+ HWND hwnd32 = WIN_Handle32(hwnd);
+ HWND parent = GetParent( hwnd32 );
+
+ if (!parent) parent = hwnd32;
+ ret = SendMessageW( parent, WM_CTLCOLORMSGBOX + ctlType, (WPARAM)hdc, (LPARAM)hwnd32 );
+ if (!ret) ret = DefWindowProcW( parent, WM_CTLCOLORMSGBOX + ctlType,
+ (WPARAM)hdc, (LPARAM)hwnd32 );
+ return ret;
+}
+
+
+/**************************************************************************
+ * GetDCEx (USER.359)
+ */
+HDC16 WINAPI GetDCEx16( HWND16 hwnd, HRGN16 hrgnClip, DWORD flags )
+{
+ return (HDC16)GetDCEx( WIN_Handle32(hwnd), hrgnClip, flags );
+}
+
+
+/**************************************************************************
+ * GetWindowPlacement (USER.370)
+ */
+BOOL16 WINAPI GetWindowPlacement16( HWND16 hwnd, WINDOWPLACEMENT16 *wp16 )
+{
+ WINDOWPLACEMENT wpl;
+
+ wpl.length = sizeof(wpl);
+ if (!GetWindowPlacement( WIN_Handle32(hwnd), &wpl )) return FALSE;
+ wp16->length = sizeof(*wp16);
+ wp16->flags = wpl.flags;
+ wp16->showCmd = wpl.showCmd;
+ CONV_POINT32TO16( &wpl.ptMinPosition, &wp16->ptMinPosition );
+ CONV_POINT32TO16( &wpl.ptMaxPosition, &wp16->ptMaxPosition );
+ CONV_RECT32TO16( &wpl.rcNormalPosition, &wp16->rcNormalPosition );
+ return TRUE;
+}
+
+
+/**************************************************************************
+ * SetWindowPlacement (USER.371)
+ */
+BOOL16 WINAPI SetWindowPlacement16( HWND16 hwnd, const WINDOWPLACEMENT16 *wp16 )
+{
+ WINDOWPLACEMENT wpl;
+
+ if (!wp16) return FALSE;
+ wpl.length = sizeof(wpl);
+ wpl.flags = wp16->flags;
+ wpl.showCmd = wp16->showCmd;
+ wpl.ptMinPosition.x = wp16->ptMinPosition.x;
+ wpl.ptMinPosition.y = wp16->ptMinPosition.y;
+ wpl.ptMaxPosition.x = wp16->ptMaxPosition.x;
+ wpl.ptMaxPosition.y = wp16->ptMaxPosition.y;
+ wpl.rcNormalPosition.left = wp16->rcNormalPosition.left;
+ wpl.rcNormalPosition.top = wp16->rcNormalPosition.top;
+ wpl.rcNormalPosition.right = wp16->rcNormalPosition.right;
+ wpl.rcNormalPosition.bottom = wp16->rcNormalPosition.bottom;
+ return SetWindowPlacement( WIN_Handle32(hwnd), &wpl );
+}
+
+
+/**************************************************************************
+ * ChildWindowFromPointEx (USER.399)
+ */
+HWND16 WINAPI ChildWindowFromPointEx16( HWND16 hwndParent, POINT16 pt, UINT16 uFlags)
+{
+ POINT pt32;
+ CONV_POINT16TO32( &pt, &pt32 );
+ return WIN_Handle16( ChildWindowFromPointEx( WIN_Handle32(hwndParent), pt32, uFlags ));
+}
+
+
+/**************************************************************************
+ * GetPriorityClipboardFormat (USER.402)
+ */
+INT16 WINAPI GetPriorityClipboardFormat16( UINT16 *list, INT16 count )
+{
+ int i;
+
+ for (i = 0; i < count; i++)
+ if (IsClipboardFormatAvailable( list[i] )) return list[i];
+ return -1;
+}
+
+
+/**************************************************************************
+ * TrackPopupMenu (USER.416)
+ */
+BOOL16 WINAPI TrackPopupMenu16( HMENU16 hMenu, UINT16 wFlags, INT16 x, INT16 y,
+ INT16 nReserved, HWND16 hwnd, const RECT16 *lpRect )
+{
+ RECT r;
+ if (lpRect) CONV_RECT16TO32( lpRect, &r );
+ return TrackPopupMenu( hMenu, wFlags, x, y, nReserved,
+ WIN_Handle32(hwnd), lpRect ? &r : NULL );
+}
+
+
+/**************************************************************************
+ * DlgDirSelectEx (USER.422)
+ */
+BOOL16 WINAPI DlgDirSelectEx16( HWND16 hwnd, LPSTR str, INT16 len, INT16 id )
+{
+ return DlgDirSelectExA( WIN_Handle32(hwnd), str, len, id );
+}
+
+
+/**************************************************************************
+ * DlgDirSelectComboBoxEx (USER.423)
+ */
+BOOL16 WINAPI DlgDirSelectComboBoxEx16( HWND16 hwnd, LPSTR str, INT16 len,
+ INT16 id )
+{
+ return DlgDirSelectComboBoxExA( WIN_Handle32(hwnd), str, len, id );
+}
+
+
+/**************************************************************************
+ * FindWindowEx (USER.427)
+ */
+HWND16 WINAPI FindWindowEx16( HWND16 parent, HWND16 child, LPCSTR className, LPCSTR title )
+{
+ return WIN_Handle16( FindWindowExA( WIN_Handle32(parent), WIN_Handle32(child),
+ className, title ));
+}
+
+
+/**************************************************************************
+ * DrawAnimatedRects (USER.448)
+ */
+BOOL16 WINAPI DrawAnimatedRects16( HWND16 hwnd, INT16 idAni,
+ const RECT16* lprcFrom, const RECT16* lprcTo )
+{
+ RECT rcFrom32, rcTo32;
+ rcFrom32.left = lprcFrom->left;
+ rcFrom32.top = lprcFrom->top;
+ rcFrom32.right = lprcFrom->right;
+ rcFrom32.bottom = lprcFrom->bottom;
+ rcTo32.left = lprcTo->left;
+ rcTo32.top = lprcTo->top;
+ rcTo32.right = lprcTo->right;
+ rcTo32.bottom = lprcTo->bottom;
+ return DrawAnimatedRects( WIN_Handle32(hwnd), idAni, &rcFrom32, &rcTo32 );
+}
+
+
+/**************************************************************************
+ * SetInternalWindowPos (USER.461)
+ */
+void WINAPI SetInternalWindowPos16( HWND16 hwnd, UINT16 showCmd, LPRECT16 rect, LPPOINT16 pt )
+{
+ RECT rc32;
+ POINT pt32;
+
+ if (rect)
+ {
+ rc32.left = rect->left;
+ rc32.top = rect->top;
+ rc32.right = rect->right;
+ rc32.bottom = rect->bottom;
+ }
+ if (pt)
+ {
+ pt32.x = pt->x;
+ pt32.y = pt->y;
+ }
+ SetInternalWindowPos( WIN_Handle32(hwnd), showCmd,
+ rect ? &rc32 : NULL, pt ? &pt32 : NULL );
+}
+
+
+/**************************************************************************
+ * CalcChildScroll (USER.462)
+ */
+void WINAPI CalcChildScroll16( HWND16 hwnd, WORD scroll )
+{
+ return CalcChildScroll( WIN_Handle32(hwnd), scroll );
+}
+
+
+/**************************************************************************
+ * ScrollChildren (USER.463)
+ */
+void WINAPI ScrollChildren16(HWND16 hwnd, UINT16 uMsg, WPARAM16 wParam, LPARAM lParam)
+{
+ ScrollChildren( WIN_Handle32(hwnd), uMsg, wParam, lParam );
+}
+
+
+/**************************************************************************
+ * DragDetect (USER.465)
+ */
+BOOL16 WINAPI DragDetect16( HWND16 hwnd, POINT16 pt )
+{
+ POINT pt32;
+ CONV_POINT16TO32( &pt, &pt32 );
+ return DragDetect( WIN_Handle32(hwnd), pt32 );
+}
+
+
+/**************************************************************************
+ * SetScrollInfo (USER.475)
+ */
+INT16 WINAPI SetScrollInfo16( HWND16 hwnd, INT16 nBar, const SCROLLINFO *info, BOOL16 redraw )
+{
+ return SetScrollInfo( WIN_Handle32(hwnd), nBar, info, redraw );
+}
+
+
+/**************************************************************************
+ * GetScrollInfo (USER.476)
+ */
+BOOL16 WINAPI GetScrollInfo16( HWND16 hwnd, INT16 nBar, LPSCROLLINFO info )
+{
+ return GetScrollInfo( WIN_Handle32(hwnd), nBar, info );
+}
+
+
+/**************************************************************************
+ * EnableScrollBar (USER.482)
+ */
+BOOL16 WINAPI EnableScrollBar16( HWND16 hwnd, INT16 nBar, UINT16 flags )
+{
+ return EnableScrollBar( WIN_Handle32(hwnd), nBar, flags );
+}
+
+
+/**************************************************************************
+ * GetShellWindow (USER.600)
+ */
+HWND16 WINAPI GetShellWindow16(void)
+{
+ return WIN_Handle16( GetShellWindow() );
+}
+
+
+/**************************************************************************
+ * GetForegroundWindow (USER.608)
+ */
+HWND16 WINAPI GetForegroundWindow16(void)
+{
+ return WIN_Handle16( GetForegroundWindow() );
+}
+
+
+/**************************************************************************
+ * SetForegroundWindow (USER.609)
+ */
+BOOL16 WINAPI SetForegroundWindow16( HWND16 hwnd )
+{
+ return SetForegroundWindow( WIN_Handle32(hwnd) );
+}
+
+
+/**************************************************************************
+ * DrawCaptionTemp (USER.657)
+ */
+BOOL16 WINAPI DrawCaptionTemp16( HWND16 hwnd, HDC16 hdc, const RECT16 *rect,
+ HFONT16 hFont, HICON16 hIcon, LPCSTR str, UINT16 uFlags )
+{
+ RECT rect32;
+
+ if (rect) CONV_RECT16TO32(rect,&rect32);
+
+ return DrawCaptionTempA( WIN_Handle32(hwnd), hdc, rect ? &rect32 : NULL,
+ hFont, hIcon, str, uFlags & 0x1f );
+}
+
+
+/**************************************************************************
+ * DrawCaption (USER.660)
+ */
+BOOL16 WINAPI DrawCaption16( HWND16 hwnd, HDC16 hdc, const RECT16 *rect, UINT16 flags )
+{
+ RECT rect32;
+
+ if (rect) CONV_RECT16TO32( rect, &rect32 );
+
+ return DrawCaption( WIN_Handle32(hwnd), hdc, rect ? &rect32 : NULL, flags );
+}
+
+
+/**************************************************************************
+ * GetMenuItemRect (USER.665)
+ */
+BOOL16 WINAPI GetMenuItemRect16( HWND16 hwnd, HMENU16 hMenu, UINT16 uItem,
+ LPRECT16 rect)
+{
+ RECT r32;
+ BOOL res;
+ if (!rect) return FALSE;
+ res = GetMenuItemRect( WIN_Handle32(hwnd), hMenu, uItem, &r32 );
+ CONV_RECT32TO16( &r32, rect );
+ return res;
+}
+
+
+/**************************************************************************
+ * SetWindowRgn (USER.668)
+ */
+INT16 WINAPI SetWindowRgn16( HWND16 hwnd, HRGN16 hrgn, BOOL16 redraw )
+{
+ return SetWindowRgn( WIN_Handle32(hwnd), hrgn, redraw );
+}
+
+
+/**************************************************************************
+ * MessageBoxIndirect (USER.827)
+ */
+INT16 WINAPI MessageBoxIndirect16( LPMSGBOXPARAMS16 msgbox )
+{
+ MSGBOXPARAMSA msgbox32;
+
+ msgbox32.cbSize = msgbox->cbSize;
+ msgbox32.hwndOwner = WIN_Handle32( msgbox->hwndOwner );
+ msgbox32.hInstance = msgbox->hInstance;
+ msgbox32.lpszText = MapSL(msgbox->lpszText);
+ msgbox32.lpszCaption = MapSL(msgbox->lpszCaption);
+ msgbox32.dwStyle = msgbox->dwStyle;
+ msgbox32.lpszIcon = MapSL(msgbox->lpszIcon);
+ msgbox32.dwContextHelpId = msgbox->dwContextHelpId;
+ msgbox32.lpfnMsgBoxCallback = msgbox->lpfnMsgBoxCallback;
+ msgbox32.dwLanguageId = msgbox->dwLanguageId;
+ return MessageBoxIndirectA( &msgbox32 );
+}