Ignore:
Timestamp:
Aug 28, 1999, 7:24:45 PM (26 years ago)
Author:
dengert
Message:

reposition child windows when parent height is changed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/new/pmwindow.cpp

    r715 r728  
    1 /* $Id: pmwindow.cpp,v 1.22 1999-08-27 17:50:56 dengert Exp $ */
     1/* $Id: pmwindow.cpp,v 1.23 1999-08-28 17:24:45 dengert Exp $ */
    22/*
    33 * Win32 Window Managment Code for OS/2
     
    212212      ULONG     parentHeight = 0;
    213213      HWND      hParent = NULLHANDLE, hFrame = NULLHANDLE;
     214      LONG      yDelta = pswp->cy - pswpo->cy;
     215      ULONG     classStyle;
    214216
    215217        dprintf(("OS2: WM_WINDOWPOSCHANGED %x %x (%d,%d) (%d,%d)", hwnd, pswp->fl, pswp->x, pswp->y, pswp->cx, pswp->cy));
     
    234236           wp.hwndInsertAfter = wndAfter->getWindowHandle();
    235237        }
     238        classStyle = win32wnd->getClass()->getStyle();
     239//        if (yDelta != 0)
     240        if ((yDelta != 0) && ((classStyle & CS_VREDRAW_W) ||
     241           ((classStyle & CS_HREDRAW_W) && (pswp->cx != pswpo->cx))))
     242        {
     243            HENUM henum = WinBeginEnumWindows(pswp->hwnd);
     244            SWP swp[10];
     245            int i = 0;
     246            HWND hwnd;
     247
     248            dprintf(("move children"));
     249            while ((hwnd = WinGetNextWindow(henum)) != NULLHANDLE)
     250            {
     251#if 0
     252               /* Do not move MDI clients.  MDI clients are a special case,
     253                * even though they are bottom aligned they are always supposed
     254                * to be the same size as their parent.  This code is an
     255                * optimization and will not work correctly if the this
     256                * assumption is incorrect.
     257                */
     258               WinBase *pBase = (WinBase *)WinQueryDAXData( hwnd );
     259               if ( pBase && pBase->typeOf() == mdiClient )
     260               {
     261                  continue;
     262               }
     263#endif
     264               // We don't know how many children we have so we'll move ten
     265               // at a time.  Not very nice, I know.
     266               WinQueryWindowPos(hwnd, &(swp[i]));
     267
     268               // The SWP flags are all set but PM will ignore any
     269               // superflous ones, so keep them as they contain useful
     270               // minimise and maximise flags.
     271               swp[i].y += yDelta;
     272
     273               if (i == 9)
     274               {
     275                  WinSetMultWindowPos(GetThreadHAB(), swp, 10);
     276                  i = 0;
     277               }
     278               else
     279               {
     280                  i++;
     281               }
     282            }
     283
     284            WinEndEnumWindows(henum);
     285
     286            // Any remaining windows?
     287            if (i)
     288               WinSetMultWindowPos(GetThreadHAB(), swp, i);
     289        }
    236290        win32wnd->MsgPosChanged((LPARAM)&wp);
     291
    237292        break;
    238293    }
     
    240295    case WM_ERASEBACKGROUND:
    241296    {
    242         return (MRESULT) FALSE;
     297        break;
    243298    }
    244299    case WM_SIZE:
    245300    {
    246      SWP swp;
    247 
    248         rc = WinQueryWindowPos(hwnd, &swp);
    249         if(rc == FALSE) {
    250                 dprintf(("WM_SIZE: WinQueryWindowPos failed!"));
    251                 break;
    252         }
    253         dprintf(("OS2: WM_SIZE %x %x (%d,%d) (%d,%d) (%d,%d)", hwnd, swp.fl, swp.x, swp.y, swp.cx, swp.cy, SHORT1FROMMP(mp2), SHORT2FROMMP(mp2)));
    254 #if 0
    255         if(win32wnd->MsgSize(SHORT1FROMMP(mp2), SHORT2FROMMP(mp2),
    256                                 (swp.fl & SWP_MINIMIZE) != 0,
    257                                 (swp.fl & SWP_MAXIMIZE) != 0))
    258         {
    259                 goto RunDefWndProc;
    260         }
    261 #endif
    262301        break;
    263302    }
Note: See TracChangeset for help on using the changeset viewer.