Skip to content
Snippets Groups Projects
winpos.c 59.1 KiB
Newer Older
  • Learn to ignore specific revisions
  • Alexandre Julliard's avatar
    Alexandre Julliard committed
    /*
     * Window position related functions.
     *
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     * Copyright 1993, 1994, 1995 Alexandre Julliard
    
     *                       1995, 1996, 1999 Alex Korobka
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    #include <string.h>
    
    #include "winerror.h"
    
    #include "windef.h"
    #include "wingdi.h"
    
    #include "winerror.h"
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    #include "user.h"
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    #include "win.h"
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    #include "hook.h"
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    #include "message.h"
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    #include "queue.h"
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    #include "winpos.h"
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    #include "dce.h"
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    #include "nonclient.h"
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    #define HAS_DLGFRAME(style,exStyle) \
        (((exStyle) & WS_EX_DLGMODALFRAME) || \
         (((style) & WS_DLGFRAME) && !((style) & WS_BORDER)))
    
    #define HAS_THICKFRAME(style) \
        (((style) & WS_THICKFRAME) && \
         !(((style) & (WS_DLGFRAME|WS_BORDER)) == WS_DLGFRAME))
    
    #define EMPTYPOINT(pt)          ((*(LONG*)&(pt)) == -1)
    
    #define PLACE_MIN		0x0001
    #define PLACE_MAX		0x0002
    #define PLACE_RECT		0x0004
    
    
    
    #define DWP_MAGIC  ((INT)('W' | ('P' << 8) | ('O' << 16) | ('S' << 24)))
    
    typedef struct
    {
        INT       actualCount;
        INT       suggestedCount;
        BOOL      valid;
        INT       wMagic;
        HWND      hwndParent;
        WINDOWPOS winPos[1];
    } DWP;
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /* ----- internal variables ----- */
    
    
    static HWND hwndPrevActive  = 0;  /* Previously active window */
    static HWND hGlobalShellWindow=0; /*the shell*/
    
    static HWND hGlobalTaskmanWindow=0;
    static HWND hGlobalProgmanWindow=0;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    static LPCSTR atomInternalPos;
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    /***********************************************************************
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     *           WINPOS_CreateInternalPosAtom
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    BOOL WINPOS_CreateInternalPosAtom()
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        LPSTR str = "SysIP";
    
        atomInternalPos = (LPCSTR)(DWORD)GlobalAddAtomA(str);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        return (atomInternalPos) ? TRUE : FALSE;
    }
    
    /***********************************************************************
     *           WINPOS_CheckInternalPos
     *
     * Called when a window is destroyed.
     */
    
    void WINPOS_CheckInternalPos( HWND hwnd )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        LPINTERNALPOS lpPos;
        MESSAGEQUEUE *pMsgQ = 0;
    
        WND *wndPtr = WIN_FindWndPtr( hwnd );
    
        lpPos = (LPINTERNALPOS) GetPropA( hwnd, atomInternalPos );
    
    
        /* Retrieve the message queue associated with this window */
        pMsgQ = (MESSAGEQUEUE *)QUEUE_Lock( wndPtr->hmemTaskQ );
        if ( !pMsgQ )
        {
    
            WARN("\tMessage queue not found. Exiting!\n" );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
        if( hwnd == hwndPrevActive ) hwndPrevActive = 0;
    
    
        if( hwnd == PERQDATA_GetActiveWnd( pMsgQ->pQData ) )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        {
    
            PERQDATA_SetActiveWnd( pMsgQ->pQData, 0 );
    
    	WARN("\tattempt to activate destroyed window!\n");
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        }
    
        if( lpPos )
        {
    
    	if( IsWindow(lpPos->hwndIconTitle) ) 
    	    DestroyWindow( lpPos->hwndIconTitle );
    
    	HeapFree( GetProcessHeap(), 0, lpPos );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        }
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /***********************************************************************
    
     *		ArrangeIconicWindows (USER.170)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    UINT16 WINAPI ArrangeIconicWindows16( HWND16 parent) 
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        return ArrangeIconicWindows(parent);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /***********************************************************************
    
     *		ArrangeIconicWindows (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    UINT WINAPI ArrangeIconicWindows( HWND parent )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        RECT rectParent;
        HWND hwndChild;
        INT x, y, xspacing, yspacing;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
        GetClientRect( parent, &rectParent );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        x = rectParent.left;
        y = rectParent.bottom;
    
        xspacing = GetSystemMetrics(SM_CXICONSPACING);
        yspacing = GetSystemMetrics(SM_CYICONSPACING);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
        hwndChild = GetWindow( parent, GW_CHILD );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        while (hwndChild)
        {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
            {
    
                WINPOS_ShowIconTitle( hwndChild, FALSE );
    
    
                SetWindowPos( hwndChild, 0, x + (xspacing - GetSystemMetrics(SM_CXICON)) / 2,
                                y - yspacing - GetSystemMetrics(SM_CYICON)/2, 0, 0,
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
                                SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE );
    
                    WINPOS_ShowIconTitle(hwndChild , TRUE );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
                if (x <= rectParent.right - xspacing) x += xspacing;
                else
                {
                    x = rectParent.left;
                    y -= yspacing;
                }
            }
    
            hwndChild = GetWindow( hwndChild, GW_HWNDNEXT );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        }
        return yspacing;
    }
    
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /***********************************************************************
    
     *		SwitchToThisWindow (USER.172)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    void WINAPI SwitchToThisWindow16( HWND16 hwnd, BOOL16 restore )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        SwitchToThisWindow( hwnd, restore );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    
    /***********************************************************************
    
     *		SwitchToThisWindow (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    void WINAPI SwitchToThisWindow( HWND hwnd, BOOL restore )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        ShowWindow( hwnd, restore ? SW_RESTORE : SW_SHOWMINIMIZED );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /***********************************************************************
    
     *		GetWindowRect (USER.32)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    void WINAPI GetWindowRect16( HWND16 hwnd, LPRECT16 rect ) 
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
        WND * wndPtr = WIN_FindWndPtr( hwnd ); 
        if (!wndPtr) return;
        
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        CONV_RECT32TO16( &wndPtr->rectWindow, rect );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    	MapWindowPoints16( wndPtr->parent->hwndSelf, 0, (POINT16 *)rect, 2 );
    
        WIN_ReleaseWndPtr(wndPtr);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    
    /***********************************************************************
    
     *		GetWindowRect (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    BOOL WINAPI GetWindowRect( HWND hwnd, LPRECT rect ) 
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
        WND * wndPtr = WIN_FindWndPtr( hwnd ); 
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        if (!wndPtr) return FALSE;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        *rect = wndPtr->rectWindow;
    
    	MapWindowPoints( wndPtr->parent->hwndSelf, 0, (POINT *)rect, 2 );
    
        WIN_ReleaseWndPtr(wndPtr);
    
        TRACE("hwnd %04x (%d,%d)-(%d,%d)\n",
    	  hwnd, rect->left, rect->top, rect->right, rect->bottom);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        return TRUE;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /***********************************************************************
    
     *		GetWindowRgn (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    int WINAPI GetWindowRgn ( HWND hwnd, HRGN hrgn )
    {
        int nRet = ERROR;
        WND *wndPtr = WIN_FindWndPtr( hwnd );
        if (wndPtr)
        {
            if (wndPtr->hrgnWnd) nRet = CombineRgn( hrgn, wndPtr->hrgnWnd, 0, RGN_COPY );
            WIN_ReleaseWndPtr(wndPtr);
        }
        return nRet;
    }
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
    /***********************************************************************
    
     *		SetWindowRgn (USER32.@)
    
     */
    int WINAPI SetWindowRgn( HWND hwnd, HRGN hrgn, BOOL bRedraw )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
        if (USER_Driver.pSetWindowRgn)
            return USER_Driver.pSetWindowRgn( hwnd, hrgn, bRedraw );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
        if (!(wndPtr = WIN_FindWndPtr(hwnd))) return FALSE;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
        if (hrgn) /* verify that region really exists */
    
            if (GetRgnBox( hrgn, &rect ) == ERROR) goto done;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
        if (wndPtr->hrgnWnd)
        {
            /* delete previous region */
            DeleteObject(wndPtr->hrgnWnd);
            wndPtr->hrgnWnd = 0;
        }
        wndPtr->hrgnWnd = hrgn;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
        /* Size the window to the rectangle of the new region (if it isn't NULL) */
        if (hrgn) SetWindowPos( hwnd, 0, rect.left, rect.top,
                                rect.right  - rect.left, rect.bottom - rect.top,
                                SWP_NOSIZE | SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOACTIVATE |
                                SWP_NOZORDER | (bRedraw ? 0 : SWP_NOREDRAW) );
    
        ret = TRUE;
    
     done:
        WIN_ReleaseWndPtr(wndPtr);
        return ret;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /***********************************************************************
    
     *		SetWindowRgn (USER.668)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    INT16 WINAPI SetWindowRgn16( HWND16 hwnd, HRGN16 hrgn,BOOL16 bRedraw)
    
    {
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
      return TRUE;
    }
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /***********************************************************************
    
     *		GetClientRect (USER.33)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    void WINAPI GetClientRect16( HWND16 hwnd, LPRECT16 rect ) 
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
        WND * wndPtr = WIN_FindWndPtr( hwnd );
    
        rect->left = rect->top = rect->right = rect->bottom = 0;
        if (wndPtr) 
        {
    	rect->right  = wndPtr->rectClient.right - wndPtr->rectClient.left;
    	rect->bottom = wndPtr->rectClient.bottom - wndPtr->rectClient.top;
        }
    
        WIN_ReleaseWndPtr(wndPtr);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    
    /***********************************************************************
    
     *		GetClientRect (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    BOOL WINAPI GetClientRect( HWND hwnd, LPRECT rect ) 
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
        WND * wndPtr = WIN_FindWndPtr( hwnd );
    
        rect->left = rect->top = rect->right = rect->bottom = 0;
    
        if (!wndPtr) return FALSE;
        rect->right  = wndPtr->rectClient.right - wndPtr->rectClient.left;
        rect->bottom = wndPtr->rectClient.bottom - wndPtr->rectClient.top;
    
    
        WIN_ReleaseWndPtr(wndPtr);
    
        TRACE("hwnd %04x (%d,%d)-(%d,%d)\n",
    	  hwnd, rect->left, rect->top, rect->right, rect->bottom);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    
    /*******************************************************************
    
     *		ClientToScreen (USER.28)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    void WINAPI ClientToScreen16( HWND16 hwnd, LPPOINT16 lppnt )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        MapWindowPoints16( hwnd, 0, lppnt, 1 );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    
    /*******************************************************************
    
     *		ClientToScreen (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    BOOL WINAPI ClientToScreen( HWND hwnd, LPPOINT lppnt )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        MapWindowPoints( hwnd, 0, lppnt, 1 );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        return TRUE;
    }
    
    
    /*******************************************************************
    
     *		ScreenToClient (USER.29)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    void WINAPI ScreenToClient16( HWND16 hwnd, LPPOINT16 lppnt )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
        MapWindowPoints16( 0, hwnd, lppnt, 1 );
    }
    
    
    /*******************************************************************
    
     *		ScreenToClient (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    BOOL WINAPI ScreenToClient( HWND hwnd, LPPOINT lppnt )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        MapWindowPoints( 0, hwnd, lppnt, 1 );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /***********************************************************************
     *           WINPOS_WindowFromPoint
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     *
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     * Find the window and hittest for a given point.
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    HWND WINPOS_WindowFromPoint( HWND hwndScope, POINT pt, INT *hittest )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        WND *wndScope, *wndPtr, *wndTmp;
        HWND hwnd_ret = 0;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
        TRACE("scope %04x %ld,%ld\n", hwndScope, pt.x, pt.y);
    
        if (!hwndScope) hwndScope = GetDesktopWindow();
        if (!(wndScope = WIN_FindWndPtr( hwndScope ))) return 0;
    
        *hittest = HTERROR;
    
        wndPtr = WIN_LockWndPtr(wndScope->child);
    
        if (wndScope->parent)
            MapWindowPoints( GetDesktopWindow(), wndScope->parent->hwndSelf, &xy, 1 );
    
        if (xy.x < wndScope->rectClient.left || pt.x >= wndScope->rectClient.right ||
    
            xy.y < wndScope->rectClient.top || pt.y >= wndScope->rectClient.bottom ||
            wndScope->dwStyle & WS_MINIMIZE)
    
            goto hittest;
    
        xy.x -= wndScope->rectClient.left;
        xy.y -= wndScope->rectClient.top;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        for (;;)
        {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
            while (wndPtr)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
            {
                /* If point is in window, and window is visible, and it  */
                /* is enabled (or it's a top-level window), then explore */
                /* its children. Otherwise, go to the next window.       */
    
    
    	     if ((wndPtr->dwStyle & WS_VISIBLE) &&
    
    	        ((wndPtr->dwExStyle & (WS_EX_LAYERED | WS_EX_TRANSPARENT)) != (WS_EX_LAYERED | WS_EX_TRANSPARENT)) &&
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
                    (!(wndPtr->dwStyle & WS_DISABLED) ||
                     ((wndPtr->dwStyle & (WS_POPUP | WS_CHILD)) != WS_CHILD)) &&
    
    		(wndPtr->hrgnWnd ?
    		PtInRegion(wndPtr->hrgnWnd, xy.x - wndPtr->rectWindow.left,
    			   xy.y - wndPtr->rectWindow.top) :
                    ((xy.x >= wndPtr->rectWindow.left) &&
    		 (xy.x < wndPtr->rectWindow.right) &&
    		 (xy.y >= wndPtr->rectWindow.top) &&
    		 (xy.y < wndPtr->rectWindow.bottom))))
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
                {
    
                    TRACE("%ld,%ld is inside %04x\n", xy.x, xy.y, wndPtr->hwndSelf);
    
                    hwnd_ret = wndPtr->hwndSelf;  /* Got a suitable window */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
                    /* If window is minimized or disabled, return at once */
    
                    if (wndPtr->dwStyle & WS_MINIMIZE)
                    {
    
                        goto end;
                    }
                    if (wndPtr->dwStyle & WS_DISABLED)
                    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
                    /* If point is not in client area, ignore the children */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
                    if ((xy.x < wndPtr->rectClient.left) ||
                        (xy.x >= wndPtr->rectClient.right) ||
                        (xy.y < wndPtr->rectClient.top) ||
                        (xy.y >= wndPtr->rectClient.bottom)) break;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
                    xy.x -= wndPtr->rectClient.left;
                    xy.y -= wndPtr->rectClient.top;
    
                    WIN_UpdateWndPtr(&wndPtr,wndPtr->child);
                }
                else
                {
                    WIN_UpdateWndPtr(&wndPtr,wndPtr->next);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    hittest:
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
            /* If nothing found, try the scope window */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
            /* Send the WM_NCHITTEST message (only if to the same task) */
    
            if (GetWindowThreadProcessId( hwnd_ret, NULL ) == GetCurrentThreadId())
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    	{
    
                INT res = SendMessageA( hwnd_ret, WM_NCHITTEST, 0, MAKELONG( pt.x, pt.y ) );
                if (res != HTTRANSPARENT)
    
                    *hittest = res;  /* Found the window */
    
            if (!(wndTmp = WIN_FindWndPtr( hwnd_ret ))) break;
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
            /* If no children found in last search, make point relative to parent */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
            if (!wndPtr)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
            {
    
                xy.x += wndTmp->rectClient.left;
                xy.y += wndTmp->rectClient.top;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
            }
    
            /* Restart the search from the next sibling */
    
            WIN_UpdateWndPtr(&wndPtr,wndTmp->next);
            hwnd_ret = wndTmp->parent ? wndTmp->parent->hwndSelf : 0;
            WIN_ReleaseWndPtr( wndTmp );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        }
    
    
    end:
        WIN_ReleaseWndPtr(wndPtr);
    
        WIN_ReleaseWndPtr(wndScope);
        return hwnd_ret;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /*******************************************************************
    
     *		WindowFromPoint (USER.30)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    HWND16 WINAPI WindowFromPoint16( POINT16 pt )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        POINT pt32;
    
        CONV_POINT16TO32( &pt, &pt32 );
        return WindowFromPoint( pt32 );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /*******************************************************************
    
     *		WindowFromPoint (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    HWND WINAPI WindowFromPoint( POINT pt )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        INT hittest;
        return WINPOS_WindowFromPoint( 0, pt, &hittest );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    
    /*******************************************************************
    
     *		ChildWindowFromPoint (USER.191)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    HWND16 WINAPI ChildWindowFromPoint16( HWND16 hwndParent, POINT16 pt )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        CONV_POINT16TO32( &pt, &pt32 );
    
        return (HWND16)ChildWindowFromPoint( hwndParent, pt32 );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    
    /*******************************************************************
    
     *		ChildWindowFromPoint (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    HWND WINAPI ChildWindowFromPoint( HWND hwndParent, POINT pt )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        /* pt is in the client coordinates */
    
        WND* wnd = WIN_FindWndPtr(hwndParent);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
        if( !wnd ) return 0;
    
        /* get client rect fast */
        rect.top = rect.left = 0;
        rect.right = wnd->rectClient.right - wnd->rectClient.left;
        rect.bottom = wnd->rectClient.bottom - wnd->rectClient.top;
    
    
        if (!PtInRect( &rect, pt ))
        {
            retvalue = 0;
            goto end;
        }
        WIN_UpdateWndPtr(&wnd,wnd->child);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        while ( wnd )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        {
    
            if (PtInRect( &wnd->rectWindow, pt ))
            {
                retvalue = wnd->hwndSelf;
                goto end;
            }
            WIN_UpdateWndPtr(&wnd,wnd->next);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        }
    
        retvalue = hwndParent;
    end:
        WIN_ReleaseWndPtr(wnd);
        return retvalue;
    
    /*******************************************************************
    
     *		ChildWindowFromPointEx (USER.399)
    
     */
    HWND16 WINAPI ChildWindowFromPointEx16( HWND16 hwndParent, POINT16 pt, UINT16 uFlags)
    {
    
        CONV_POINT16TO32( &pt, &pt32 );
    
        return (HWND16)ChildWindowFromPointEx( hwndParent, pt32, uFlags );
    
    }
    
    
    /*******************************************************************
    
     *		ChildWindowFromPointEx (USER32.@)
    
    HWND WINAPI ChildWindowFromPointEx( HWND hwndParent, POINT pt,
    		UINT uFlags)
    
    {
        /* pt is in the client coordinates */
    
        WND* wnd = WIN_FindWndPtr(hwndParent);
    
    
        if( !wnd ) return 0;
    
        /* get client rect fast */
        rect.top = rect.left = 0;
        rect.right = wnd->rectClient.right - wnd->rectClient.left;
        rect.bottom = wnd->rectClient.bottom - wnd->rectClient.top;
    
    
        if (!PtInRect( &rect, pt ))
        {
            retvalue = 0;
            goto end;
        }
        WIN_UpdateWndPtr(&wnd,wnd->child);
    
            if (PtInRect( &wnd->rectWindow, pt )) {
    
    		if ( (uFlags & CWP_SKIPINVISIBLE) && 
    
    				!(wnd->dwStyle & WS_VISIBLE) );
    
    		else if ( (uFlags & CWP_SKIPDISABLED) && 
    
    				(wnd->dwStyle & WS_DISABLED) );
    
    		else if ( (uFlags & CWP_SKIPTRANSPARENT) && 
    
    				(wnd->dwExStyle & WS_EX_TRANSPARENT) );
    
                    {
                        retvalue = wnd->hwndSelf;
                        goto end;
    	        }
                    
    
    	WIN_UpdateWndPtr(&wnd,wnd->next);
    
        retvalue = hwndParent;
    end:
        WIN_ReleaseWndPtr(wnd);
        return retvalue;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    /*******************************************************************
     *         WINPOS_GetWinOffset
     *
     * Calculate the offset between the origin of the two windows. Used
     * to implement MapWindowPoints.
     */
    
    static void WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo,
                                     POINT *offset )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        WND * wndPtr = 0;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        offset->x = offset->y = 0;
        if (hwndFrom == hwndTo ) return;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
          /* Translate source window origin to screen coords */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        if (hwndFrom)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
            if (!(wndPtr = WIN_FindWndPtr( hwndFrom )))
            {
    
                ERR("bad hwndFrom = %04x\n",hwndFrom);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
                return;
            }
            while (wndPtr->parent)
            {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
                offset->x += wndPtr->rectClient.left;
                offset->y += wndPtr->rectClient.top;
    
                WIN_UpdateWndPtr(&wndPtr,wndPtr->parent);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
            }
    
            WIN_ReleaseWndPtr(wndPtr);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        }
    
          /* Translate origin to destination window coords */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        if (hwndTo)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
            if (!(wndPtr = WIN_FindWndPtr( hwndTo )))
            {
    
                ERR("bad hwndTo = %04x\n", hwndTo );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
                return;
            }
            while (wndPtr->parent)
            {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
                offset->x -= wndPtr->rectClient.left;
                offset->y -= wndPtr->rectClient.top;
    
                WIN_UpdateWndPtr(&wndPtr,wndPtr->parent);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
            }    
    
            WIN_ReleaseWndPtr(wndPtr);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        }
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    
    /*******************************************************************
    
     *		MapWindowPoints (USER.258)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    void WINAPI MapWindowPoints16( HWND16 hwndFrom, HWND16 hwndTo,
                                   LPPOINT16 lppt, UINT16 count )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
        WINPOS_GetWinOffset( hwndFrom, hwndTo, &offset );
        while (count--)
        {
    	lppt->x += offset.x;
    	lppt->y += offset.y;
            lppt++;
        }
    }
    
    
    /*******************************************************************
    
     *		MapWindowPoints (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    INT WINAPI MapWindowPoints( HWND hwndFrom, HWND hwndTo,
                                   LPPOINT lppt, UINT count )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        WINPOS_GetWinOffset( hwndFrom, hwndTo, &offset );
        while (count--)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    	lppt->x += offset.x;
    	lppt->y += offset.y;
            lppt++;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        }
    
        return MAKELONG( LOWORD(offset.x), LOWORD(offset.y) );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    
    /***********************************************************************
    
     *		IsIconic (USER.31)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    BOOL16 WINAPI IsIconic16(HWND16 hWnd)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /***********************************************************************
    
     *		IsIconic (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        WND * wndPtr = WIN_FindWndPtr(hWnd);
        if (wndPtr == NULL) return FALSE;
    
        retvalue = (wndPtr->dwStyle & WS_MINIMIZE) != 0;
        WIN_ReleaseWndPtr(wndPtr);
        return retvalue;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
     
     
    /***********************************************************************
    
     *		IsZoomed (USER.272)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    BOOL16 WINAPI IsZoomed16(HWND16 hWnd)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /***********************************************************************
    
     *		IsZoomed (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        WND * wndPtr = WIN_FindWndPtr(hWnd);
        if (wndPtr == NULL) return FALSE;
    
        retvalue = (wndPtr->dwStyle & WS_MAXIMIZE) != 0;
        WIN_ReleaseWndPtr(wndPtr);
        return retvalue;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /*******************************************************************
    
     *		GetActiveWindow (USER.60)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    HWND16 WINAPI GetActiveWindow16(void)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        return (HWND16)GetActiveWindow();
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /*******************************************************************
    
     *		GetActiveWindow (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    HWND WINAPI GetActiveWindow(void)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        MESSAGEQUEUE *pCurMsgQ = 0;
    
        /* Get the messageQ for the current thread */
    
        if (!(pCurMsgQ = QUEUE_Current()))
    
            WARN("\tCurrent message queue not found. Exiting!\n" );
    
            return 0;
        }
    
        /* Return the current active window from the perQ data of the current message Q */
    
        return PERQDATA_GetActiveWnd( pCurMsgQ->pQData );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /*******************************************************************
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     *         WINPOS_CanActivate
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    static BOOL WINPOS_CanActivate(WND* pWnd)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        if( pWnd && ( (pWnd->dwStyle & (WS_DISABLED | WS_VISIBLE | WS_CHILD))
           == WS_VISIBLE ) ) return TRUE;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        return FALSE;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /*******************************************************************
    
     *		SetActiveWindow (USER.59)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    HWND16 WINAPI SetActiveWindow16( HWND16 hwnd )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /*******************************************************************
    
     *		SetActiveWindow (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    HWND WINAPI SetActiveWindow( HWND hwnd )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        WND *wndPtr = WIN_FindWndPtr( hwnd );
    
        MESSAGEQUEUE *pMsgQ = 0, *pCurMsgQ = 0;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
        if (!wndPtr || (wndPtr->dwStyle & (WS_DISABLED | WS_CHILD)))
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
        /* Get the messageQ for the current thread */
    
        if (!(pCurMsgQ = QUEUE_Current()))
    
            WARN("\tCurrent message queue not found. Exiting!\n" );
    
            goto CLEANUP;
        }
        
        /* Retrieve the message queue associated with this window */
        pMsgQ = (MESSAGEQUEUE *)QUEUE_Lock( wndPtr->hmemTaskQ );
        if ( !pMsgQ )
        {
    
            WARN("\tWindow message queue not found. Exiting!\n" );
    
            goto CLEANUP;
        }
    
        /* Make sure that the window is associated with the calling threads
         * message queue. It must share the same perQ data.
         */
    
        if ( pCurMsgQ->pQData != pMsgQ->pQData )
            goto CLEANUP;
        
        /* Save current active window */
        prev = PERQDATA_GetActiveWnd( pMsgQ->pQData );
        
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        WINPOS_SetActiveWindow( hwnd, 0, 0 );
    
    
    CLEANUP:
        /* Unlock the queues before returning */
        if ( pMsgQ )
            QUEUE_Unlock( pMsgQ );
        
    
    end:
        WIN_ReleaseWndPtr(wndPtr);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        return prev;
    }
    
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /*******************************************************************
    
     *		GetForegroundWindow (USER.608)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    HWND16 WINAPI GetForegroundWindow16(void)
    {
    
        return (HWND16)GetForegroundWindow();
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    
    /*******************************************************************
    
     *		SetForegroundWindow (USER.609)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    BOOL16 WINAPI SetForegroundWindow16( HWND16 hwnd )
    {
    
        return SetForegroundWindow( hwnd );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    
    /*******************************************************************
    
     *		GetForegroundWindow (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    HWND WINAPI GetForegroundWindow(void)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        HWND hwndActive = 0;
    
        /* Get the foreground window (active window of hActiveQueue) */
        if ( hActiveQueue )
        {
            MESSAGEQUEUE *pActiveQueue = QUEUE_Lock( hActiveQueue );
            if ( pActiveQueue )
                hwndActive = PERQDATA_GetActiveWnd( pActiveQueue->pQData );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    
            QUEUE_Unlock( pActiveQueue );
        }
    
        return hwndActive;
    }
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    /*******************************************************************
    
     *		SetForegroundWindow (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    BOOL WINAPI SetForegroundWindow( HWND hwnd )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        return WINPOS_ChangeActiveWindow( hwnd, FALSE );
    
    /*******************************************************************
    
     *		AllowSetForegroundWindow (USER32.@)
    
     */
    BOOL WINAPI AllowSetForegroundWindow( DWORD procid )
    {
        /* FIXME: If Win98/2000 style SetForegroundWindow behavior is
         * implemented, then fix this function. */
        return TRUE;
    }
    
    
    /*******************************************************************
    
     *		LockSetForegroundWindow (USER32.@)
    
     */
    BOOL WINAPI LockSetForegroundWindow( UINT lockcode )
    {
        /* FIXME: If Win98/2000 style SetForegroundWindow behavior is
         * implemented, then fix this function. */
        return TRUE;
    }
    
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /*******************************************************************
    
     *		GetShellWindow (USER.600)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    HWND16 WINAPI GetShellWindow16(void)
    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /*******************************************************************
    
     *		SetShellWindow (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    HWND WINAPI SetShellWindow(HWND hwndshell)
    
    {   WARN("(hWnd=%08x) semi stub\n",hwndshell );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
        hGlobalShellWindow = hwndshell;
        return hGlobalShellWindow;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
    /*******************************************************************
    
     *		GetShellWindow (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    {   WARN("(hWnd=%x) semi stub\n",hGlobalShellWindow );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    
        return hGlobalShellWindow;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /***********************************************************************
    
     *		BringWindowToTop (USER.45)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    BOOL16 WINAPI BringWindowToTop16( HWND16 hwnd )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /***********************************************************************
    
     *		BringWindowToTop (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    BOOL WINAPI BringWindowToTop( HWND hwnd )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {
    
        return SetWindowPos( hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /***********************************************************************
    
     *		MoveWindow (USER.56)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    BOOL16 WINAPI MoveWindow16( HWND16 hwnd, INT16 x, INT16 y, INT16 cx, INT16 cy,
                                BOOL16 repaint )
    {
    
        return MoveWindow(hwnd,x,y,cx,cy,repaint);
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /***********************************************************************
    
     *		MoveWindow (USER32.@)
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
     */
    
    BOOL WINAPI MoveWindow( HWND hwnd, INT x, INT y, INT cx, INT cy,
                                BOOL repaint )
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    {    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
        int flags = SWP_NOZORDER | SWP_NOACTIVATE;
        if (!repaint) flags |= SWP_NOREDRAW;
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    	    hwnd, x, y, cx, cy, repaint );
    
        return SetWindowPos( hwnd, 0, x, y, cx, cy, flags );
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    }
    
    
    Alexandre Julliard's avatar
    Alexandre Julliard committed
    /***********************************************************************
     *           WINPOS_InitInternalPos