| /* |
| * 16-bit windowing functions |
| * |
| * Copyright 2001 Alexandre Julliard |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| #include "wine/winuser16.h" |
| #include "wownt32.h" |
| #include "win.h" |
| #include "user_private.h" |
| |
| /* handle <--> handle16 conversions */ |
| #define HANDLE_16(h32) (LOWORD(h32)) |
| #define HANDLE_32(h16) ((HANDLE)(ULONG_PTR)(h16)) |
| |
| static HWND16 hwndSysModal; |
| |
| struct wnd_enum_info |
| { |
| WNDENUMPROC16 proc; |
| LPARAM param; |
| }; |
| |
| /* callback for 16-bit window enumeration functions */ |
| static BOOL CALLBACK wnd_enum_callback( HWND hwnd, LPARAM param ) |
| { |
| const struct wnd_enum_info *info = (struct wnd_enum_info *)param; |
| WORD args[3]; |
| DWORD ret; |
| |
| args[2] = HWND_16(hwnd); |
| args[1] = HIWORD(info->param); |
| args[0] = LOWORD(info->param); |
| WOWCallback16Ex( (DWORD)info->proc, WCB16_PASCAL, sizeof(args), args, &ret ); |
| return LOWORD(ret); |
| } |
| |
| /* convert insert after window handle to 32-bit */ |
| static inline 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 ); |
| } |
| |
| |
| /*********************************************************************** |
| * SetTimer (USER.10) |
| */ |
| UINT16 WINAPI SetTimer16( HWND16 hwnd, UINT16 id, UINT16 timeout, TIMERPROC16 proc ) |
| { |
| TIMERPROC proc32 = (TIMERPROC)WINPROC_AllocProc16( (WNDPROC16)proc ); |
| return SetTimer( WIN_Handle32(hwnd), id, timeout, proc32 ); |
| } |
| |
| |
| /*********************************************************************** |
| * SetSystemTimer (USER.11) |
| */ |
| UINT16 WINAPI SetSystemTimer16( HWND16 hwnd, UINT16 id, UINT16 timeout, TIMERPROC16 proc ) |
| { |
| TIMERPROC proc32 = (TIMERPROC)WINPROC_AllocProc16( (WNDPROC16)proc ); |
| return SetSystemTimer( WIN_Handle32(hwnd), id, timeout, proc32 ); |
| } |
| |
| |
| /************************************************************************** |
| * 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 HWND_16( SetCapture( WIN_Handle32(hwnd) )); |
| } |
| |
| |
| /************************************************************************** |
| * ReleaseCapture (USER.19) |
| */ |
| BOOL16 WINAPI ReleaseCapture16(void) |
| { |
| return ReleaseCapture(); |
| } |
| |
| |
| /************************************************************************** |
| * SetFocus (USER.22) |
| */ |
| HWND16 WINAPI SetFocus16( HWND16 hwnd ) |
| { |
| return HWND_16( SetFocus( WIN_Handle32(hwnd) )); |
| } |
| |
| |
| /************************************************************************** |
| * GetFocus (USER.23) |
| */ |
| HWND16 WINAPI GetFocus16(void) |
| { |
| return HWND_16( GetFocus() ); |
| } |
| |
| |
| /************************************************************************** |
| * RemoveProp (USER.24) |
| */ |
| HANDLE16 WINAPI RemoveProp16( HWND16 hwnd, LPCSTR str ) |
| { |
| return HANDLE_16(RemovePropA( WIN_Handle32(hwnd), str )); |
| } |
| |
| |
| /************************************************************************** |
| * GetProp (USER.25) |
| */ |
| HANDLE16 WINAPI GetProp16( HWND16 hwnd, LPCSTR str ) |
| { |
| return HANDLE_16(GetPropA( WIN_Handle32(hwnd), str )); |
| } |
| |
| |
| /************************************************************************** |
| * SetProp (USER.26) |
| */ |
| BOOL16 WINAPI SetProp16( HWND16 hwnd, LPCSTR str, HANDLE16 handle ) |
| { |
| return SetPropA( WIN_Handle32(hwnd), str, HANDLE_32(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; |
| |
| pt32.x = pt.x; |
| pt32.y = pt.y; |
| return HWND_16( 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 ); |
| } |
| |
| |
| /*********************************************************************** |
| * BeginPaint (USER.39) |
| */ |
| HDC16 WINAPI BeginPaint16( HWND16 hwnd, LPPAINTSTRUCT16 lps ) |
| { |
| PAINTSTRUCT ps; |
| |
| BeginPaint( WIN_Handle32(hwnd), &ps ); |
| lps->hdc = HDC_16(ps.hdc); |
| lps->fErase = ps.fErase; |
| lps->rcPaint.top = ps.rcPaint.top; |
| lps->rcPaint.left = ps.rcPaint.left; |
| lps->rcPaint.right = ps.rcPaint.right; |
| lps->rcPaint.bottom = ps.rcPaint.bottom; |
| lps->fRestore = ps.fRestore; |
| lps->fIncUpdate = ps.fIncUpdate; |
| return lps->hdc; |
| } |
| |
| |
| /*********************************************************************** |
| * EndPaint (USER.40) |
| */ |
| BOOL16 WINAPI EndPaint16( HWND16 hwnd, const PAINTSTRUCT16* lps ) |
| { |
| PAINTSTRUCT ps; |
| |
| ps.hdc = HDC_32(lps->hdc); |
| return EndPaint( WIN_Handle32(hwnd), &ps ); |
| } |
| |
| |
| /************************************************************************** |
| * 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 HWND_16( GetParent( WIN_Handle32(hwnd) )); |
| } |
| |
| |
| /************************************************************************** |
| * IsWindow (USER.47) |
| */ |
| BOOL16 WINAPI IsWindow16( HWND16 hwnd ) |
| { |
| STACK16FRAME *frame = MapSL( (SEGPTR)NtCurrentTeb()->WOW32Reserved ); |
| frame->es = USER_HeapSel; |
| /* don't use WIN_Handle32 here, we don't care about the full handle */ |
| return IsWindow( HWND_32(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 HWND_16( FindWindowA( className, title )); |
| } |
| |
| |
| /************************************************************************** |
| * DestroyWindow (USER.53) |
| */ |
| BOOL16 WINAPI DestroyWindow16( HWND16 hwnd ) |
| { |
| return DestroyWindow( WIN_Handle32(hwnd) ); |
| } |
| |
| |
| /******************************************************************* |
| * EnumWindows (USER.54) |
| */ |
| BOOL16 WINAPI EnumWindows16( WNDENUMPROC16 func, LPARAM lParam ) |
| { |
| struct wnd_enum_info info; |
| |
| info.proc = func; |
| info.param = lParam; |
| return EnumWindows( wnd_enum_callback, (LPARAM)&info ); |
| } |
| |
| |
| /********************************************************************** |
| * EnumChildWindows (USER.55) |
| */ |
| BOOL16 WINAPI EnumChildWindows16( HWND16 parent, WNDENUMPROC16 func, LPARAM lParam ) |
| { |
| struct wnd_enum_info info; |
| |
| info.proc = func; |
| info.param = lParam; |
| return EnumChildWindows( WIN_Handle32(parent), wnd_enum_callback, (LPARAM)&info ); |
| } |
| |
| |
| /************************************************************************** |
| * 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 ); |
| } |
| |
| |
| /*********************************************************************** |
| * RegisterClass (USER.57) |
| */ |
| ATOM WINAPI RegisterClass16( const WNDCLASS16 *wc ) |
| { |
| WNDCLASSEX16 wcex; |
| |
| wcex.cbSize = sizeof(wcex); |
| wcex.style = wc->style; |
| wcex.lpfnWndProc = wc->lpfnWndProc; |
| wcex.cbClsExtra = wc->cbClsExtra; |
| wcex.cbWndExtra = wc->cbWndExtra; |
| wcex.hInstance = wc->hInstance; |
| wcex.hIcon = wc->hIcon; |
| wcex.hCursor = wc->hCursor; |
| wcex.hbrBackground = wc->hbrBackground; |
| wcex.lpszMenuName = wc->lpszMenuName; |
| wcex.lpszClassName = wc->lpszClassName; |
| wcex.hIconSm = 0; |
| return RegisterClassEx16( &wcex ); |
| } |
| |
| |
| /************************************************************************** |
| * 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 HWND_16( SetActiveWindow( WIN_Handle32(hwnd) )); |
| } |
| |
| |
| /************************************************************************** |
| * GetActiveWindow (USER.60) |
| */ |
| HWND16 WINAPI GetActiveWindow16(void) |
| { |
| return HWND_16( GetActiveWindow() ); |
| } |
| |
| |
| /************************************************************************** |
| * ScrollWindow (USER.61) |
| */ |
| void WINAPI ScrollWindow16( HWND16 hwnd, INT16 dx, INT16 dy, const RECT16 *rect, |
| const RECT16 *clipRect ) |
| { |
| RECT rect32, clipRect32; |
| |
| if (rect) |
| { |
| rect32.left = rect->left; |
| rect32.top = rect->top; |
| rect32.right = rect->right; |
| rect32.bottom = rect->bottom; |
| } |
| if (clipRect) |
| { |
| clipRect32.left = clipRect->left; |
| clipRect32.top = clipRect->top; |
| clipRect32.right = clipRect->right; |
| clipRect32.bottom = clipRect->bottom; |
| } |
| 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 HDC_16(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_32(hdc) ); |
| } |
| |
| |
| /************************************************************************** |
| * 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 HWND_16( WindowFromDC( HDC_32(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 ); |
| } |
| |
| |
| /*********************************************************************** |
| * GetClassLong (USER.131) |
| */ |
| LONG WINAPI GetClassLong16( HWND16 hwnd16, INT16 offset ) |
| { |
| LONG_PTR ret = GetClassLongA( WIN_Handle32(hwnd16), offset ); |
| |
| switch( offset ) |
| { |
| case GCLP_WNDPROC: |
| return (LONG_PTR)WINPROC_GetProc16( (WNDPROC)ret, FALSE ); |
| case GCLP_MENUNAME: |
| return MapLS( (void *)ret ); /* leak */ |
| default: |
| return ret; |
| } |
| } |
| |
| |
| /*********************************************************************** |
| * SetClassLong (USER.132) |
| */ |
| LONG WINAPI SetClassLong16( HWND16 hwnd16, INT16 offset, LONG newval ) |
| { |
| switch( offset ) |
| { |
| case GCLP_WNDPROC: |
| { |
| WNDPROC new_proc = WINPROC_AllocProc16( (WNDPROC16)newval ); |
| WNDPROC old_proc = (WNDPROC)SetClassLongA( WIN_Handle32(hwnd16), offset, (LONG_PTR)new_proc ); |
| return (LONG)WINPROC_GetProc16( old_proc, FALSE ); |
| } |
| case GCLP_MENUNAME: |
| newval = (LONG)MapSL( newval ); |
| /* fall through */ |
| default: |
| return SetClassLongA( WIN_Handle32(hwnd16), 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 HWND_16( GetClipboardOwner() ); |
| } |
| |
| |
| /************************************************************************** |
| * SetClipboardViewer (USER.147) |
| */ |
| HWND16 WINAPI SetClipboardViewer16( HWND16 hwnd ) |
| { |
| return HWND_16( SetClipboardViewer( WIN_Handle32(hwnd) )); |
| } |
| |
| |
| /************************************************************************** |
| * GetClipboardViewer (USER.148) |
| */ |
| HWND16 WINAPI GetClipboardViewer16(void) |
| { |
| return HWND_16( 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 HMENU_16(GetSystemMenu( WIN_Handle32(hwnd), revert )); |
| } |
| |
| |
| /************************************************************************** |
| * GetMenu (USER.157) |
| */ |
| HMENU16 WINAPI GetMenu16( HWND16 hwnd ) |
| { |
| return HMENU_16(GetMenu( WIN_Handle32(hwnd) )); |
| } |
| |
| |
| /************************************************************************** |
| * SetMenu (USER.158) |
| */ |
| BOOL16 WINAPI SetMenu16( HWND16 hwnd, HMENU16 hMenu ) |
| { |
| return SetMenu( WIN_Handle32(hwnd), HMENU_32(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_32(hMenu), id, wHilite ); |
| } |
| |
| |
| /************************************************************************** |
| * CreateCaret (USER.163) |
| */ |
| void WINAPI CreateCaret16( HWND16 hwnd, HBITMAP16 bitmap, INT16 width, INT16 height ) |
| { |
| CreateCaret( WIN_Handle32(hwnd), HBITMAP_32(bitmap), width, height ); |
| } |
| |
| |
| /***************************************************************** |
| * DestroyCaret (USER.164) |
| */ |
| void WINAPI DestroyCaret16(void) |
| { |
| DestroyCaret(); |
| } |
| |
| |
| /***************************************************************** |
| * SetCaretPos (USER.165) |
| */ |
| void WINAPI SetCaretPos16( INT16 x, INT16 y ) |
| { |
| SetCaretPos( x, y ); |
| } |
| |
| |
| /************************************************************************** |
| * HideCaret (USER.166) |
| */ |
| void WINAPI HideCaret16( HWND16 hwnd ) |
| { |
| HideCaret( WIN_Handle32(hwnd) ); |
| } |
| |
| |
| /************************************************************************** |
| * ShowCaret (USER.167) |
| */ |
| void WINAPI ShowCaret16( HWND16 hwnd ) |
| { |
| ShowCaret( WIN_Handle32(hwnd) ); |
| } |
| |
| |
| /***************************************************************** |
| * SetCaretBlinkTime (USER.168) |
| */ |
| void WINAPI SetCaretBlinkTime16( UINT16 msecs ) |
| { |
| SetCaretBlinkTime( msecs ); |
| } |
| |
| |
| /***************************************************************** |
| * GetCaretBlinkTime (USER.169) |
| */ |
| UINT16 WINAPI GetCaretBlinkTime16(void) |
| { |
| return GetCaretBlinkTime(); |
| } |
| |
| |
| /************************************************************************** |
| * 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 ); |
| } |
| |
| |
| /***************************************************************** |
| * GetCaretPos (USER.183) |
| */ |
| void WINAPI GetCaretPos16( LPPOINT16 pt16 ) |
| { |
| POINT pt; |
| if (GetCaretPos( &pt )) |
| { |
| pt16->x = pt.x; |
| pt16->y = pt.y; |
| } |
| } |
| |
| |
| /************************************************************************** |
| * 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 ); |
| rect->left = r.left; |
| rect->top = r.top; |
| rect->right = r.right; |
| rect->bottom = r.bottom; |
| return ret; |
| } |
| |
| |
| /************************************************************************** |
| * ChildWindowFromPoint (USER.191) |
| */ |
| HWND16 WINAPI ChildWindowFromPoint16( HWND16 hwndParent, POINT16 pt ) |
| { |
| POINT pt32; |
| |
| pt32.x = pt.x; |
| pt32.y = pt.y; |
| return HWND_16( ChildWindowFromPoint( WIN_Handle32(hwndParent), pt32 )); |
| } |
| |
| |
| /*********************************************************************** |
| * CascadeChildWindows (USER.198) |
| */ |
| void WINAPI CascadeChildWindows16( HWND16 parent, WORD action ) |
| { |
| CascadeWindows( WIN_Handle32(parent), action, NULL, 0, NULL ); |
| } |
| |
| |
| /*********************************************************************** |
| * TileChildWindows (USER.199) |
| */ |
| void WINAPI TileChildWindows16( HWND16 parent, WORD action ) |
| { |
| TileWindows( WIN_Handle32(parent), action, NULL, 0, NULL ); |
| } |
| |
| |
| /*********************************************************************** |
| * GetWindowTask (USER.224) |
| */ |
| HTASK16 WINAPI GetWindowTask16( HWND16 hwnd ) |
| { |
| DWORD tid = GetWindowThreadProcessId( HWND_32(hwnd), NULL ); |
| if (!tid) return 0; |
| return HTASK_16(tid); |
| } |
| |
| /********************************************************************** |
| * EnumTaskWindows (USER.225) |
| */ |
| BOOL16 WINAPI EnumTaskWindows16( HTASK16 hTask, WNDENUMPROC16 func, LPARAM lParam ) |
| { |
| struct wnd_enum_info info; |
| DWORD tid = HTASK_32( hTask ); |
| |
| if (!tid) return FALSE; |
| info.proc = func; |
| info.param = lParam; |
| return EnumThreadWindows( tid, wnd_enum_callback, (LPARAM)&info ); |
| } |
| |
| |
| /************************************************************************** |
| * GetTopWindow (USER.229) |
| */ |
| HWND16 WINAPI GetTopWindow16( HWND16 hwnd ) |
| { |
| return HWND_16( 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 HWND_16( SetParent( WIN_Handle32(hwndChild), WIN_Handle32(hwndNewParent) )); |
| } |
| |
| |
| /************************************************************************** |
| * GetCapture (USER.236) |
| */ |
| HWND16 WINAPI GetCapture16(void) |
| { |
| return HWND_16( GetCapture() ); |
| } |
| |
| |
| /************************************************************************** |
| * GetUpdateRgn (USER.237) |
| */ |
| INT16 WINAPI GetUpdateRgn16( HWND16 hwnd, HRGN16 hrgn, BOOL16 erase ) |
| { |
| return GetUpdateRgn( WIN_Handle32(hwnd), HRGN_32(hrgn), erase ); |
| } |
| |
| |
| /************************************************************************** |
| * ExcludeUpdateRgn (USER.238) |
| */ |
| INT16 WINAPI ExcludeUpdateRgn16( HDC16 hdc, HWND16 hwnd ) |
| { |
| return ExcludeUpdateRgn( HDC_32(hdc), WIN_Handle32(hwnd) ); |
| } |
| |
| |
| /************************************************************************** |
| * GetOpenClipboardWindow (USER.248) |
| */ |
| HWND16 WINAPI GetOpenClipboardWindow16(void) |
| { |
| return HWND_16( GetOpenClipboardWindow() ); |
| } |
| |
| |
| /************************************************************************** |
| * BeginDeferWindowPos (USER.259) |
| */ |
| HDWP16 WINAPI BeginDeferWindowPos16( INT16 count ) |
| { |
| return HDWP_16(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 HDWP_16(DeferWindowPos( HDWP_32(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_32(hdwp)); |
| } |
| |
| |
| /************************************************************************** |
| * GetWindow (USER.262) |
| */ |
| HWND16 WINAPI GetWindow16( HWND16 hwnd, WORD rel ) |
| { |
| return HWND_16( 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_32(hMenu) ); |
| } |
| |
| |
| /************************************************************************** |
| * GetDesktopWindow (USER.286) |
| */ |
| HWND16 WINAPI GetDesktopWindow16(void) |
| { |
| return HWND_16( GetDesktopWindow() ); |
| } |
| |
| |
| /************************************************************************** |
| * GetLastActivePopup (USER.287) |
| */ |
| HWND16 WINAPI GetLastActivePopup16( HWND16 hwnd ) |
| { |
| return HWND_16( GetLastActivePopup( WIN_Handle32(hwnd) )); |
| } |
| |
| |
| /************************************************************************** |
| * RedrawWindow (USER.290) |
| */ |
| BOOL16 WINAPI RedrawWindow16( HWND16 hwnd, const RECT16 *rectUpdate, |
| HRGN16 hrgnUpdate, UINT16 flags ) |
| { |
| if (rectUpdate) |
| { |
| RECT r; |
| r.left = rectUpdate->left; |
| r.top = rectUpdate->top; |
| r.right = rectUpdate->right; |
| r.bottom = rectUpdate->bottom; |
| return RedrawWindow(WIN_Handle32(hwnd), &r, HRGN_32(hrgnUpdate), flags); |
| } |
| return RedrawWindow(WIN_Handle32(hwnd), NULL, HRGN_32(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) |
| { |
| rect32.left = rect->left; |
| rect32.top = rect->top; |
| rect32.right = rect->right; |
| rect32.bottom = rect->bottom; |
| } |
| if (clipRect) |
| { |
| clipRect32.left = clipRect->left; |
| clipRect32.top = clipRect->top; |
| clipRect32.right = clipRect->right; |
| clipRect32.bottom = clipRect->bottom; |
| } |
| ret = ScrollWindowEx( WIN_Handle32(hwnd), dx, dy, rect ? &rect32 : NULL, |
| clipRect ? &clipRect32 : NULL, HRGN_32(hrgnUpdate), |
| (rcUpdate) ? &rcUpdate32 : NULL, flags ); |
| if (rcUpdate) |
| { |
| rcUpdate->left = rcUpdate32.left; |
| rcUpdate->top = rcUpdate32.top; |
| rcUpdate->right = rcUpdate32.right; |
| rcUpdate->bottom = rcUpdate32.bottom; |
| } |
| 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_32(hdc), (LPPOINT)&rect, 2 ); |
| rc16.left = rect.left; |
| rc16.top = rect.top; |
| rc16.right = rect.right; |
| rc16.bottom = rect.bottom; |
| 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 HDC_16(GetDCEx(WIN_Handle32(hwnd), HRGN_32(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; |
| wp16->ptMinPosition.x = wpl.ptMinPosition.x; |
| wp16->ptMinPosition.y = wpl.ptMinPosition.y; |
| wp16->ptMaxPosition.x = wpl.ptMaxPosition.x; |
| wp16->ptMaxPosition.y = wpl.ptMaxPosition.y; |
| wp16->rcNormalPosition.left = wpl.rcNormalPosition.left; |
| wp16->rcNormalPosition.top = wpl.rcNormalPosition.top; |
| wp16->rcNormalPosition.right = wpl.rcNormalPosition.right; |
| wp16->rcNormalPosition.bottom = wpl.rcNormalPosition.bottom; |
| 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 ); |
| } |
| |
| |
| /*********************************************************************** |
| * RegisterClassEx (USER.397) |
| */ |
| ATOM WINAPI RegisterClassEx16( const WNDCLASSEX16 *wc ) |
| { |
| WNDCLASSEXA wc32; |
| |
| wc32.cbSize = sizeof(wc32); |
| wc32.style = wc->style; |
| wc32.lpfnWndProc = WINPROC_AllocProc16( wc->lpfnWndProc ); |
| wc32.cbClsExtra = wc->cbClsExtra; |
| wc32.cbWndExtra = wc->cbWndExtra; |
| wc32.hInstance = HINSTANCE_32(GetExePtr(wc->hInstance)); |
| if (!wc32.hInstance) wc32.hInstance = HINSTANCE_32(GetModuleHandle16(NULL)); |
| wc32.hIcon = HICON_32(wc->hIcon); |
| wc32.hCursor = HCURSOR_32(wc->hCursor); |
| wc32.hbrBackground = HBRUSH_32(wc->hbrBackground); |
| wc32.lpszMenuName = MapSL(wc->lpszMenuName); |
| wc32.lpszClassName = MapSL(wc->lpszClassName); |
| wc32.hIconSm = HICON_32(wc->hIconSm); |
| return RegisterClassExA( &wc32 ); |
| } |
| |
| |
| /*********************************************************************** |
| * GetClassInfoEx (USER.398) |
| * |
| * FIXME: this is just a guess, I have no idea if GetClassInfoEx() is the |
| * same in Win16 as in Win32. --AJ |
| */ |
| BOOL16 WINAPI GetClassInfoEx16( HINSTANCE16 hInst16, SEGPTR name, WNDCLASSEX16 *wc ) |
| { |
| WNDCLASSEXA wc32; |
| HINSTANCE hInstance; |
| BOOL ret; |
| |
| if (hInst16 == GetModuleHandle16("user")) hInstance = user32_module; |
| else hInstance = HINSTANCE_32(GetExePtr( hInst16 )); |
| |
| ret = GetClassInfoExA( hInstance, MapSL(name), &wc32 ); |
| |
| if (ret) |
| { |
| wc->lpfnWndProc = WINPROC_GetProc16( wc32.lpfnWndProc, FALSE ); |
| wc->style = wc32.style; |
| wc->cbClsExtra = wc32.cbClsExtra; |
| wc->cbWndExtra = wc32.cbWndExtra; |
| wc->hInstance = (wc32.hInstance == user32_module) ? GetModuleHandle16("user") : HINSTANCE_16(wc32.hInstance); |
| wc->hIcon = HICON_16(wc32.hIcon); |
| wc->hIconSm = HICON_16(wc32.hIconSm); |
| wc->hCursor = HCURSOR_16(wc32.hCursor); |
| wc->hbrBackground = HBRUSH_16(wc32.hbrBackground); |
| wc->lpszClassName = 0; |
| wc->lpszMenuName = MapLS(wc32.lpszMenuName); /* FIXME: leak */ |
| } |
| return ret; |
| } |
| |
| |
| /************************************************************************** |
| * ChildWindowFromPointEx (USER.399) |
| */ |
| HWND16 WINAPI ChildWindowFromPointEx16( HWND16 hwndParent, POINT16 pt, UINT16 uFlags) |
| { |
| POINT pt32; |
| |
| pt32.x = pt.x; |
| pt32.y = pt.y; |
| return HWND_16( 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; |
| } |
| |
| |
| /*********************************************************************** |
| * UnregisterClass (USER.403) |
| */ |
| BOOL16 WINAPI UnregisterClass16( LPCSTR className, HINSTANCE16 hInstance ) |
| { |
| if (hInstance == GetModuleHandle16("user")) hInstance = 0; |
| return UnregisterClassA( className, HINSTANCE_32(GetExePtr( hInstance )) ); |
| } |
| |
| |
| /*********************************************************************** |
| * GetClassInfo (USER.404) |
| */ |
| BOOL16 WINAPI GetClassInfo16( HINSTANCE16 hInst16, SEGPTR name, WNDCLASS16 *wc ) |
| { |
| WNDCLASSEX16 wcex; |
| UINT16 ret = GetClassInfoEx16( hInst16, name, &wcex ); |
| |
| if (ret) |
| { |
| wc->style = wcex.style; |
| wc->lpfnWndProc = wcex.lpfnWndProc; |
| wc->cbClsExtra = wcex.cbClsExtra; |
| wc->cbWndExtra = wcex.cbWndExtra; |
| wc->hInstance = wcex.hInstance; |
| wc->hIcon = wcex.hIcon; |
| wc->hCursor = wcex.hCursor; |
| wc->hbrBackground = wcex.hbrBackground; |
| wc->lpszMenuName = wcex.lpszMenuName; |
| wc->lpszClassName = wcex.lpszClassName; |
| } |
| return ret; |
| } |
| |
| |
| /************************************************************************** |
| * 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) |
| { |
| r.left = lpRect->left; |
| r.top = lpRect->top; |
| r.right = lpRect->right; |
| r.bottom = lpRect->bottom; |
| } |
| return TrackPopupMenu( HMENU_32(hMenu), wFlags, x, y, nReserved, |
| WIN_Handle32(hwnd), lpRect ? &r : NULL ); |
| } |
| |
| |
| /************************************************************************** |
| * FindWindowEx (USER.427) |
| */ |
| HWND16 WINAPI FindWindowEx16( HWND16 parent, HWND16 child, LPCSTR className, LPCSTR title ) |
| { |
| return HWND_16( FindWindowExA( WIN_Handle32(parent), WIN_Handle32(child), |
| className, title )); |
| } |
| |
| |
| /*********************************************************************** |
| * DefFrameProc (USER.445) |
| */ |
| LRESULT WINAPI DefFrameProc16( HWND16 hwnd, HWND16 hwndMDIClient, |
| UINT16 message, WPARAM16 wParam, LPARAM lParam ) |
| { |
| switch (message) |
| { |
| case WM_SETTEXT: |
| lParam = (LPARAM)MapSL(lParam); |
| /* fall through */ |
| case WM_COMMAND: |
| case WM_NCACTIVATE: |
| case WM_SETFOCUS: |
| case WM_SIZE: |
| return DefFrameProcA( WIN_Handle32(hwnd), WIN_Handle32(hwndMDIClient), |
| message, wParam, lParam ); |
| |
| case WM_NEXTMENU: |
| { |
| MDINEXTMENU next_menu; |
| DefFrameProcW( WIN_Handle32(hwnd), WIN_Handle32(hwndMDIClient), |
| message, wParam, (LPARAM)&next_menu ); |
| return MAKELONG( HMENU_16(next_menu.hmenuNext), HWND_16(next_menu.hwndNext) ); |
| } |
| default: |
| return DefWindowProc16(hwnd, message, wParam, lParam); |
| } |
| } |
| |
| |
| /*********************************************************************** |
| * DefMDIChildProc (USER.447) |
| */ |
| LRESULT WINAPI DefMDIChildProc16( HWND16 hwnd, UINT16 message, |
| WPARAM16 wParam, LPARAM lParam ) |
| { |
| switch (message) |
| { |
| case WM_SETTEXT: |
| return DefMDIChildProcA( WIN_Handle32(hwnd), message, wParam, (LPARAM)MapSL(lParam) ); |
| |
| case WM_MENUCHAR: |
| case WM_CLOSE: |
| case WM_SETFOCUS: |
| case WM_CHILDACTIVATE: |
| case WM_SYSCOMMAND: |
| case WM_SETVISIBLE: |
| case WM_SIZE: |
| case WM_SYSCHAR: |
| return DefMDIChildProcW( WIN_Handle32(hwnd), message, wParam, lParam ); |
| |
| case WM_GETMINMAXINFO: |
| { |
| MINMAXINFO16 *mmi16 = MapSL(lParam); |
| MINMAXINFO mmi; |
| |
| mmi.ptReserved.x = mmi16->ptReserved.x; |
| mmi.ptReserved.y = mmi16->ptReserved.y; |
| mmi.ptMaxSize.x = mmi16->ptMaxSize.x; |
| mmi.ptMaxSize.y = mmi16->ptMaxSize.y; |
| mmi.ptMaxPosition.x = mmi16->ptMaxPosition.x; |
| mmi.ptMaxPosition.y = mmi16->ptMaxPosition.y; |
| mmi.ptMinTrackSize.x = mmi16->ptMinTrackSize.x; |
| mmi.ptMinTrackSize.y = mmi16->ptMinTrackSize.y; |
| mmi.ptMaxTrackSize.x = mmi16->ptMaxTrackSize.x; |
| mmi.ptMaxTrackSize.y = mmi16->ptMaxTrackSize.y; |
| |
| DefMDIChildProcW( WIN_Handle32(hwnd), message, wParam, (LPARAM)&mmi ); |
| |
| mmi16->ptReserved.x = mmi.ptReserved.x; |
| mmi16->ptReserved.y = mmi.ptReserved.y; |
| mmi16->ptMaxSize.x = mmi.ptMaxSize.x; |
| mmi16->ptMaxSize.y = mmi.ptMaxSize.y; |
| mmi16->ptMaxPosition.x = mmi.ptMaxPosition.x; |
| mmi16->ptMaxPosition.y = mmi.ptMaxPosition.y; |
| mmi16->ptMinTrackSize.x = mmi.ptMinTrackSize.x; |
| mmi16->ptMinTrackSize.y = mmi.ptMinTrackSize.y; |
| mmi16->ptMaxTrackSize.x = mmi.ptMaxTrackSize.x; |
| mmi16->ptMaxTrackSize.y = mmi.ptMaxTrackSize.y; |
| return 0; |
| } |
| case WM_NEXTMENU: |
| { |
| MDINEXTMENU next_menu; |
| DefMDIChildProcW( WIN_Handle32(hwnd), message, wParam, (LPARAM)&next_menu ); |
| return MAKELONG( HMENU_16(next_menu.hmenuNext), HWND_16(next_menu.hwndNext) ); |
| } |
| default: |
| return DefWindowProc16(hwnd, message, wParam, lParam); |
| } |
| } |
| |
| |
| /************************************************************************** |
| * 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 ); |
| } |
| |
| |
| /*********************************************************************** |
| * GetInternalWindowPos (USER.460) |
| */ |
| UINT16 WINAPI GetInternalWindowPos16( HWND16 hwnd, LPRECT16 rectWnd, LPPOINT16 ptIcon ) |
| { |
| WINDOWPLACEMENT16 wndpl; |
| |
| if (!GetWindowPlacement16( hwnd, &wndpl )) return 0; |
| if (rectWnd) *rectWnd = wndpl.rcNormalPosition; |
| if (ptIcon) *ptIcon = wndpl.ptMinPosition; |
| return wndpl.showCmd; |
| } |
| |
| |
| /************************************************************************** |
| * 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 ) |
| { |
| 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; |
| |
| pt32.x = pt.x; |
| pt32.y = pt.y; |
| 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 HWND_16( GetShellWindow() ); |
| } |
| |
| |
| /************************************************************************** |
| * GetForegroundWindow (USER.608) |
| */ |
| HWND16 WINAPI GetForegroundWindow16(void) |
| { |
| return HWND_16( 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) |
| { |
| rect32.left = rect->left; |
| rect32.top = rect->top; |
| rect32.right = rect->right; |
| rect32.bottom = rect->bottom; |
| } |
| return DrawCaptionTempA( WIN_Handle32(hwnd), HDC_32(hdc), |
| rect ? &rect32 : NULL, HFONT_32(hFont), |
| HICON_32(hIcon), str, uFlags & 0x1f ); |
| } |
| |
| |
| /************************************************************************** |
| * DrawCaption (USER.660) |
| */ |
| BOOL16 WINAPI DrawCaption16( HWND16 hwnd, HDC16 hdc, const RECT16 *rect, UINT16 flags ) |
| { |
| RECT rect32; |
| |
| if (rect) |
| { |
| rect32.left = rect->left; |
| rect32.top = rect->top; |
| rect32.right = rect->right; |
| rect32.bottom = rect->bottom; |
| } |
| return DrawCaption(WIN_Handle32(hwnd), HDC_32(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_32(hMenu), uItem, &r32 ); |
| rect->left = r32.left; |
| rect->top = r32.top; |
| rect->right = r32.right; |
| rect->bottom = r32.bottom; |
| return res; |
| } |
| |
| |
| /************************************************************************** |
| * SetWindowRgn (USER.668) |
| */ |
| INT16 WINAPI SetWindowRgn16( HWND16 hwnd, HRGN16 hrgn, BOOL16 redraw ) |
| { |
| return SetWindowRgn( WIN_Handle32(hwnd), HRGN_32(hrgn), redraw ); |
| } |
| |
| |
| /************************************************************************** |
| * MessageBoxIndirect (USER.827) |
| */ |
| INT16 WINAPI MessageBoxIndirect16( LPMSGBOXPARAMS16 msgbox ) |
| { |
| MSGBOXPARAMSA msgbox32; |
| |
| msgbox32.cbSize = msgbox->cbSize; |
| msgbox32.hwndOwner = WIN_Handle32( msgbox->hwndOwner ); |
| msgbox32.hInstance = HINSTANCE_32(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 ); |
| } |