Changeset 2381


Ignore:
Timestamp:
Jan 9, 2000, 3:14:25 PM (25 years ago)
Author:
cbratschi
Message:

scrollbar support and many other things

Location:
trunk/src/user32/new
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/src/user32/new/makefile

    r2290 r2381  
    1 # $Id: makefile,v 1.53 2000-01-01 14:59:41 cbratschi Exp $
     1# $Id: makefile,v 1.54 2000-01-09 14:14:22 cbratschi Exp $
    22
    33#
     
    6969$(PDWIN32_LIB)/libuls.lib
    7070$(PDWIN32_LIB)/odincrt.lib
     71$(PDWIN32_LIB)/shell32.lib
    7172OS2386.LIB
    7273$(RTLLIB_O)
  • TabularUnified trunk/src/user32/new/oslibmsg.cpp

    r2379 r2381  
    1 /* $Id: oslibmsg.cpp,v 1.10 2000-01-08 17:08:55 sandervl Exp $ */
     1/* $Id: oslibmsg.cpp,v 1.11 2000-01-09 14:14:22 cbratschi Exp $ */
    22/*
    33 * Window message translation functions for OS/2
     
    241241    } while (eaten);
    242242  }
     243
    243244  OS2ToWinMsgTranslate((PVOID)thdb, &os2msg, pMsg, isUnicode, MSG_REMOVE);
    244245  memcpy(MsgThreadPtr, &os2msg, sizeof(QMSG));
     
    278279        return TRUE;
    279280  }
     281
    280282continuepeekmsg:
    281283  do {
  • TabularUnified trunk/src/user32/new/oslibmsgtranslate.cpp

    r2379 r2381  
    1 /* $Id: oslibmsgtranslate.cpp,v 1.8 2000-01-08 17:08:56 sandervl Exp $ */
     1/* $Id: oslibmsgtranslate.cpp,v 1.9 2000-01-09 14:14:23 cbratschi Exp $ */
    22/*
    33 * Window message translation functions for OS/2
     
    144144  }
    145145  winMsg->time = os2Msg->time;
    146   winMsg->pt.x = os2Msg->ptl.x;
     146  //CB: PM bug or undocumented feature? ptl.x highword is set!
     147  winMsg->pt.x = os2Msg->ptl.x & 0xFFFF;
    147148  winMsg->pt.y = mapScreenY(os2Msg->ptl.y);
    148149
  • TabularUnified trunk/src/user32/new/pmframe.cpp

    r2377 r2381  
    1 /* $Id: pmframe.cpp,v 1.8 2000-01-08 16:47:47 cbratschi Exp $ */
     1/* $Id: pmframe.cpp,v 1.9 2000-01-09 14:14:23 cbratschi Exp $ */
    22/*
    33 * Win32 Frame Managment Code for OS/2
     
    3131//******************************************************************************
    3232//******************************************************************************
    33 VOID Draw3DRect(HPS hps,RECTL rect,LONG colorBR,LONG colorTL)
    34 {
    35   POINTL point;
    36 
    37   GpiSetColor(hps,colorBR);
    38   point.x = rect.xLeft;
    39   point.y = rect.yBottom;
    40   GpiMove(hps,&point);
    41   point.x = rect.xRight-1;
    42   GpiLine(hps,&point);
    43   point.y = rect.yTop-1;
    44   GpiLine(hps,&point);
    45   GpiSetColor(hps,colorTL);
    46   point.x--;
    47   GpiMove(hps,&point);
    48   point.x = rect.xLeft;
    49   GpiLine(hps,&point);
    50   point.y = rect.yBottom+1;
    51   GpiLine(hps,&point);
    52 }
    53 //******************************************************************************
    54 //******************************************************************************
    55 inline VOID DeflateRect(RECTL *rect)
    56 {
    57   rect->xLeft++;
    58   rect->xRight--;
    59   rect->yTop--;
    60   rect->yBottom++;
    61 }
    62 //******************************************************************************
    63 //******************************************************************************
    64 VOID DrawFrame(HPS hps,RECTL *rect,Win32BaseWindow *win32wnd)
    65 {
    66   LONG clrWhite,clrBlack,clrDark,clrLight;
    67   POINTL point;
    68   DWORD dwExStyle = win32wnd->getExStyle();
    69   DWORD dwStyle = win32wnd->getStyle();
    70 
    71   //CB: todo: switch to RGB mode and use win colors
    72   clrWhite = CLR_WHITE;
    73   clrBlack = CLR_BLACK;
    74   clrLight = CLR_PALEGRAY;
    75   clrDark  = CLR_DARKGRAY;
    76 
    77   if (dwExStyle & WS_EX_CLIENTEDGE_W)
    78   {
    79     Draw3DRect(hps,*rect,clrWhite,clrDark);
    80     DeflateRect(rect);
    81     Draw3DRect(hps,*rect,clrLight,clrBlack);
    82   }
    83   else if (dwExStyle & WS_EX_DLGMODALFRAME_W)
    84   {
    85     Draw3DRect(hps,*rect,clrBlack,clrLight);
    86     DeflateRect(rect);
    87     Draw3DRect(hps,*rect,clrDark,clrWhite);
    88     DeflateRect(rect);
    89     Draw3DRect(hps,*rect,clrLight,clrLight);
    90   }
    91   else if (dwExStyle & WS_EX_STATICEDGE_W)
    92   {
    93     Draw3DRect(hps,*rect,clrWhite,clrDark);
    94   }
    95   else if (dwExStyle & WS_EX_WINDOWEDGE_W);
    96   else if (dwStyle & WS_BORDER_W)
    97   {
    98     Draw3DRect(hps,*rect,clrBlack,clrBlack);
    99   }
    100 
    101   DeflateRect(rect);
    102 }
    103 //******************************************************************************
    104 //******************************************************************************
    105 BOOL CanDrawSizeBox(Win32BaseWindow *win32wnd)
    106 {
    107   return ((win32wnd->getStyle() & WS_SIZEBOX_W) && (WinQueryWindowULong(win32wnd->getOS2FrameWindowHandle(),QWL_STYLE) & FS_SIZEBORDER)
    108           && win32wnd->getVertScrollHandle() && WinQueryWindow(win32wnd->getVertScrollHandle(),QW_PARENT) == win32wnd->getOS2FrameWindowHandle()
    109           && win32wnd->getHorzScrollHandle() && WinQueryWindow(win32wnd->getHorzScrollHandle(),QW_PARENT) == win32wnd->getOS2FrameWindowHandle());
    110 }
    111 //******************************************************************************
    112 //******************************************************************************
    113 VOID GetSizeBox(Win32BaseWindow *win32wnd,RECTL *rect)
    114 {
    115   SWP swpHorz,swpVert;
    116 
    117   WinQueryWindowPos(win32wnd->getVertScrollHandle(),&swpVert);
    118   WinQueryWindowPos(win32wnd->getHorzScrollHandle(),&swpHorz);
    119   rect->xLeft = swpVert.x;
    120   rect->xRight = swpVert.x+swpVert.cx;
    121   rect->yTop = swpHorz.y+swpHorz.cy;
    122   rect->yBottom = swpHorz.y;
    123 }
    124 //******************************************************************************
    125 //******************************************************************************
    126 BOOL InSizeBox(Win32BaseWindow *win32wnd,POINTS *points)
    127 {
    128   if (CanDrawSizeBox(win32wnd))
    129   {
    130     RECTL rect;
    131     POINTL point;
    132 
    133     point.x = points->x;
    134     point.y = points->y;
    135     GetSizeBox(win32wnd,&rect);
    136     return (WinPtInRect(GetThreadHAB(),&rect,&point));
    137   }
    138 
    139   return FALSE;
    140 }
    141 //******************************************************************************
    142 //******************************************************************************
    143 VOID DrawSizeBox(HPS hps,RECTL rect)
    144 {
    145   POINTL p1,p2;
    146   LONG clrDark = CLR_DARKGRAY,clrWhite = CLR_WHITE;
    147   INT x;
    148 
    149   //CB: todo: switch to RGB mode and use win colors
    150   WinFillRect(hps,&rect,SYSCLR_DIALOGBACKGROUND);
    151   p1.x = rect.xRight-2;
    152   p1.y = rect.yBottom;
    153   p2.x = rect.xRight-1;
    154   p2.y = rect.yBottom+1;
    155   for (x = 0;x < 3;x++)
    156   {
    157     GpiSetColor(hps,clrDark);
    158     GpiMove(hps,&p1);
    159     GpiLine(hps,&p2);
    160     p1.x--;
    161     p2.y++;
    162     GpiMove(hps,&p1);
    163     GpiLine(hps,&p2);
    164     GpiSetColor(hps,clrWhite);
    165     p1.x--;
    166     p2.y++;
    167     GpiMove(hps,&p1);
    168     GpiLine(hps,&p2);
    169     p1.x -= 2;
    170     p2.y += 2;
    171   }
    172 }
    173 //******************************************************************************
    174 //******************************************************************************
    175 void DrawActivate(Win32BaseWindow *win32wnd, HWND hwnd)
    176 {
    177     if (!win32wnd->isChild())
    178     {
    179         if (CanDrawSizeBox(win32wnd))
    180         {
    181           HPS hps;
    182           RECTL rect;
    183 
    184           GetSizeBox(win32wnd,&rect);
    185           hps = WinGetClipPS(hwnd,0,PSF_CLIPCHILDREN | PSF_CLIPSIBLINGS);
    186           DrawSizeBox(hps,rect);
    187           WinReleasePS(hps);
    188 
    189         }
    190     }
    191     else
    192     {
    193         HPS hps;
    194         RECTL rect;
    195 
    196         WinQueryWindowRect(hwnd,&rect);
    197         rect.xRight = rect.xRight-rect.xLeft;
    198         rect.yTop = rect.yTop-rect.yBottom;
    199         rect.xLeft = rect.yBottom = 0;
    200         hps = WinGetClipPS(hwnd,0,PSF_CLIPCHILDREN | PSF_CLIPSIBLINGS);
    201         DrawFrame(hps,&rect,win32wnd);
    202         WinReleasePS(hps);
    203     }
    204 }
    205 //******************************************************************************
    206 //******************************************************************************
    20733VOID FrameTrackFrame(Win32BaseWindow *win32wnd,DWORD flags)
    20834{
     
    594420}
    595421
    596 VOID FrameGetBorderSize(Win32BaseWindow *win32wnd,PWPOINT pSize)
    597 {
    598   WinSendMsg(win32wnd->getOS2FrameWindowHandle(),WM_QUERYBORDERSIZE,(MPARAM)pSize,(MPARAM)0);
    599 }
    600 
    601 VOID FrameSetBorderSize(Win32BaseWindow *win32wnd,BOOL resize)
    602 {
    603   POINTL point;
    604 
    605   if (!resize)
    606   {
    607     WinSendMsg(win32wnd->getOS2FrameWindowHandle(),WM_SETBORDERSIZE,(MPARAM)win32wnd->getBorderWidth(),(MPARAM)win32wnd->getBorderHeight());
    608 
    609     return;
    610   }
    611 
    612   FrameGetBorderSize(win32wnd,&point);
    613   WinSendMsg(win32wnd->getOS2FrameWindowHandle(),WM_SETBORDERSIZE,(MPARAM)win32wnd->getBorderWidth(),(MPARAM)win32wnd->getBorderHeight());
    614   if ((point.x != win32wnd->getBorderWidth()) || (point.y != win32wnd->getBorderHeight()))
    615   {
    616     INT xDiff = win32wnd->getBorderWidth()-point.x;
    617     INT yDiff = win32wnd->getBorderHeight()-point.y;
    618     SWP swp;
    619 
    620     WinQueryWindowPos(win32wnd->getOS2FrameWindowHandle(),&swp);
    621     swp.x  += xDiff;
    622     swp.y  += yDiff;
    623     swp.cx -= 2*xDiff;
    624     swp.cy -= 2*yDiff;
    625     WinSetWindowPos(win32wnd->getOS2FrameWindowHandle(),0,swp.x,swp.y,swp.cx,swp.cy,SWP_MOVE | SWP_SIZE);
    626   }
    627 }
    628 
    629 UINT FrameGetDefSizeBorderSize(VOID)
    630 {
    631   return WinQuerySysValue(HWND_DESKTOP,SV_CXSIZEBORDER);
    632 }
    633 
    634 BOOL FrameCreateScrollBars(Win32BaseWindow *win32wnd,BOOL createHorz,BOOL createVert,BOOL updateFrame,DWORD *flags)
    635 {
    636   HWND hwndHScroll = 0,hwndVScroll = 0;
    637   ULONG updateFlags = 0;
    638 
    639   if (createHorz)
    640   {
    641     hwndHScroll = WinCreateWindow(win32wnd->getOS2FrameWindowHandle(),WC_SCROLLBAR,"",WS_VISIBLE | WS_PARENTCLIP | WS_SYNCPAINT | SBS_HORZ,0,0,0,0,win32wnd->getOS2FrameWindowHandle(),HWND_TOP,FID_HORZSCROLL,NULL,NULL);
    642     if (hwndHScroll) win32wnd->setHorzScrollHandle(hwndHScroll);
    643     else return FALSE;
    644     updateFlags = FCF_HORZSCROLL;
    645   }
    646 
    647   if (createVert)
    648   {
    649     hwndVScroll = WinCreateWindow(win32wnd->getOS2FrameWindowHandle(),WC_SCROLLBAR,"",WS_VISIBLE | WS_PARENTCLIP | WS_SYNCPAINT | SBS_VERT,0,0,0,0,win32wnd->getOS2FrameWindowHandle(),HWND_TOP,FID_VERTSCROLL,NULL,NULL);
    650     if (hwndVScroll) win32wnd->setVertScrollHandle(hwndVScroll); else
    651     {
    652       if (hwndHScroll) WinDestroyWindow(hwndHScroll);
    653 
    654       return FALSE;
    655     }
    656     updateFlags |= FCF_VERTSCROLL;
    657   }
    658 
    659   win32wnd->subclassScrollBars(hwndHScroll,hwndVScroll);
    660 
    661   if (updateFrame && updateFlags) WinSendMsg(win32wnd->getOS2FrameWindowHandle(),WM_UPDATEFRAME,(MPARAM)0,(MPARAM)0);
    662   if (flags) *flags = updateFlags;
    663 
    664   return TRUE;
    665 }
    666 
    667 VOID FrameGetScrollBarHandles(Win32BaseWindow *win32wnd,BOOL getHorz,BOOL getVert)
    668 {
    669   if (getHorz) win32wnd->setHorzScrollHandle(WinWindowFromID(win32wnd->getOS2FrameWindowHandle(),FID_HORZSCROLL));
    670   if (getVert) win32wnd->setVertScrollHandle(WinWindowFromID(win32wnd->getOS2FrameWindowHandle(),FID_VERTSCROLL));
    671 }
    672 
    673 BOOL FrameShowScrollBars(Win32BaseWindow *win32wnd,BOOL changeHorz,BOOL changeVert,BOOL fShow,BOOL updateFrame,DWORD *flags)
    674 {
    675   HWND hwndObj = WinQueryObjectWindow(HWND_DESKTOP);
    676   ULONG updateFlags = 0;
    677 
    678   if (changeHorz)
    679   {
    680     HWND hwndCurPar = WinQueryWindow(win32wnd->getHorzScrollHandle(),QW_PARENT);
    681 
    682     if ((fShow && (hwndCurPar == hwndObj)) || (!fShow && (hwndCurPar != hwndObj)))
    683     {
    684       WinSetParent(win32wnd->getHorzScrollHandle(),fShow ? win32wnd->getOS2FrameWindowHandle():HWND_OBJECT,FALSE);
    685       updateFlags |= FCF_HORZSCROLL;
    686     }
    687   }
    688 
    689   if (changeVert)
    690   {
    691     HWND hwndCurPar = WinQueryWindow(win32wnd->getVertScrollHandle(),QW_PARENT);
    692 
    693     if ((fShow && (hwndCurPar == hwndObj)) || (!fShow && (hwndCurPar != hwndObj)))
    694     {
    695       WinSetParent(win32wnd->getVertScrollHandle(),fShow ? win32wnd->getOS2FrameWindowHandle():HWND_OBJECT,FALSE);
    696       updateFlags |= FCF_VERTSCROLL;
    697     }
    698   }
    699 
    700   if (updateFrame && updateFlags) WinSendMsg(win32wnd->getOS2FrameWindowHandle(),WM_UPDATEFRAME,(MPARAM)updateFlags,(MPARAM)0);
    701   if (flags) *flags = updateFlags;
    702 
    703   return TRUE;
    704 }
    705 
    706422VOID FrameUpdateFrame(Win32BaseWindow *win32wnd,DWORD flags)
    707423{
    708424  WinSendMsg(win32wnd->getOS2FrameWindowHandle(),WM_UPDATEFRAME,(MPARAM)flags,(MPARAM)0);
    709425}
    710 
    711 DWORD FrameHitTest(Win32BaseWindow *win32wnd,INT x,INT y)
    712 {
    713   POINTL point;
    714   HWND hwnd = win32wnd->getOS2FrameWindowHandle(),child;
    715 
    716   if (hwnd == win32wnd->getOS2WindowHandle()) return HTCLIENT_W;
    717   if (win32wnd->getOS2WindowHandle() == WinQueryCapture(HWND_DESKTOP)) return HTCLIENT_W;
    718   point.x = x;
    719   point.y = mapScreenY(y);
    720   WinMapWindowPoints(HWND_DESKTOP,hwnd,&point,1);
    721   child = WinWindowFromPoint(hwnd,&point,FALSE);
    722 
    723   if (child == 0) return HTERROR_W;
    724   if (child == win32wnd->getOS2FrameWindowHandle())
    725   {
    726     RECTL client,frame;
    727 
    728     if (CanDrawSizeBox(win32wnd))
    729     {
    730       RECTL rect;
    731 
    732       GetSizeBox(win32wnd,&rect);
    733       if (WinPtInRect(GetThreadHAB(),&rect,&point)) return HTGROWBOX_W;
    734     }
    735     //somewhere in the border
    736     INT w = WinQuerySysValue(HWND_DESKTOP,SV_CXMINMAXBUTTON);
    737     INT h = WinQuerySysValue(HWND_DESKTOP,SV_CXMINMAXBUTTON);
    738     WinQueryWindowRect(hwnd,&frame);
    739 
    740     if (point.y < h)
    741     {
    742       if (point.x < w) return HTBOTTOMLEFT_W;
    743       if (point.x > frame.xRight-1-w) return HTBOTTOMRIGHT_W;
    744       return HTBOTTOM_W;
    745     }
    746     if (point.y > frame.yTop-1-h)
    747     {
    748       if (point.x < w) return HTTOPLEFT_W;
    749       if (point.x > frame.xRight-1-w) return HTTOPRIGHT_W;
    750       return HTTOP_W;
    751     }
    752     return HTBORDER_W;
    753   } else
    754   {
    755     if (child == WinWindowFromID(hwnd,FID_CLIENT)) return HTCLIENT_W;
    756     if (child == WinWindowFromID(hwnd,FID_VERTSCROLL)) return HTVSCROLL_W;
    757     if (child == WinWindowFromID(hwnd,FID_HORZSCROLL)) return HTHSCROLL_W;
    758     if (child == WinWindowFromID(hwnd,FID_SYSMENU)) return HTSYSMENU_W;
    759     if (child == WinWindowFromID(hwnd,FID_TITLEBAR)) return HTCAPTION_W;
    760     if (child == WinWindowFromID(hwnd,FID_MENU)) return HTMENU_W;
    761     if (child == WinWindowFromID(hwnd,FID_MINMAX))
    762     {
    763       //CB: close, reduce or zoom
    764       return HTZOOM_W;
    765     }
    766 
    767     return HTERROR_W;
    768   }
    769 }
  • TabularUnified trunk/src/user32/new/pmframe.h

    r2377 r2381  
    1 /* $Id: pmframe.h,v 1.2 2000-01-08 16:47:48 cbratschi Exp $ */
     1/* $Id: pmframe.h,v 1.3 2000-01-09 14:14:23 cbratschi Exp $ */
    22/*
    33 * Win32 Frame Managment Code for OS/2
     
    1010
    1111PVOID FrameSubclassFrameWindow(Win32BaseWindow *win32wnd);
    12 VOID  FrameSetBorderSize(Win32BaseWindow *win32wnd,BOOL resize);
    13 UINT  FrameGetDefSizeBorderSize(VOID);
    14 VOID  FrameTrackFrame(Win32BaseWindow *win32wnd,BOOL lefttop);
    15 BOOL  FrameCreateScrollBars(Win32BaseWindow *win32wnd,BOOL createHorz,BOOL createVert,BOOL updateFrame,DWORD *flags = NULL);
    16 VOID  FrameGetScrollBarHandles(Win32BaseWindow *win32wnd,BOOL getHorz,BOOL getVert);
    17 BOOL  FrameShowScrollBars(Win32BaseWindow *win32wnd,BOOL changeHorz,BOOL changeVert,BOOL fShow,BOOL updateFrame,DWORD *flags = NULL);
    1812VOID  FrameUpdateFrame(Win32BaseWindow *win32wnd,DWORD flags);
    1913
     
    4842#define HTSIZELAST_W          HTBOTTOMRIGHT_W
    4943
    50 DWORD FrameHitTest(Win32BaseWindow *win32wnd,INT x,INT y);
    51 
    5244#define TFOS_LEFT                    0x0001
    5345#define TFOS_TOP                     0x0002
  • TabularUnified trunk/src/user32/new/scroll.cpp

    r2290 r2381  
    1 /* $Id: scroll.cpp,v 1.7 2000-01-01 14:57:22 cbratschi Exp $ */
     1/* $Id: scroll.cpp,v 1.8 2000-01-09 14:14:23 cbratschi Exp $ */
    22/*
    33 * Scrollbar control
     
    7373static BOOL SCROLL_MovingThumb = FALSE;
    7474
    75 // Get the scrollbar handle: works only with frame/control handles
    76 
    77 static HWND SCROLL_GetScrollHandle(HWND hwnd,INT nBar)
    78 {
    79   switch(nBar)
    80   {
    81     case SB_HORZ:
    82     case SB_VERT:
    83       {
    84         Win32BaseWindow *win32wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
    85 
    86         if (!win32wnd) return 0;
    87 //CB: I removed WS_* check due to problems, but it should work
    88         if (nBar == SB_HORZ)
    89           return /*(win32wnd->getStyle() & WS_HSCROLL) ?*/ Win32BaseWindow::OS2ToWin32Handle(win32wnd->getHorzScrollHandle())/*:0*/;
    90         else
    91           return /*(win32wnd->getStyle() & WS_VSCROLL) ?*/ Win32BaseWindow::OS2ToWin32Handle(win32wnd->getVertScrollHandle())/*:0*/;
    92       }
    93 
    94     case SB_CTL:
    95       return hwnd;
    96 
    97     default:
    98       return 0;
    99   }
    100 }
    101 
    102 static HWND SCROLL_GetFrameHandle(HWND hwnd)
    103 {
    104   Win32BaseWindow *win32wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
    105 
    106   if (!win32wnd) return 0;
    107   return Win32BaseWindow::GetWindowFromOS2FrameHandle(OSLibWinQueryWindow(win32wnd->getOS2WindowHandle(),QWOS_OWNER))->getWindowHandle();
    108 }
    109 
    11075// Get the infoPtr: works only with scrollbar handles
    11176
     
    12085        case SB_VERT:
    12186          win32wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
    122           if (!win32wnd) return NULL;
    123           hwndFrame = OSLibWinQueryWindow(win32wnd->getOS2WindowHandle(),QWOS_OWNER);
    124           win32wnd = Win32BaseWindow::GetWindowFromOS2FrameHandle(hwndFrame);
    12587          if (!win32wnd) return NULL;
    12688          return win32wnd->getScrollInfo(nBar);
     
    157119    {
    158120      case SB_HORZ:
     121      {
     122        Win32BaseWindow *win32wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
     123        RECT rectClient;
     124
     125        if (!win32wnd) return FALSE;
     126        rectClient = *win32wnd->getClientRectPtr();
     127        mapWin32Rect(win32wnd->getParent() ? win32wnd->getParent()->getOS2WindowHandle():OSLIB_HWND_DESKTOP,win32wnd->getOS2FrameWindowHandle(),&rectClient);
     128        lprect->left   = rectClient.left;
     129        lprect->top    = rectClient.bottom;
     130        lprect->right  = rectClient.right;
     131        lprect->bottom = lprect->top+GetSystemMetrics(SM_CYHSCROLL);
     132        if (win32wnd->getStyle() & WS_BORDER)
     133        {
     134          lprect->left--;
     135          lprect->right++;
     136        } else if (win32wnd->getStyle() & WS_VSCROLL)
     137            lprect->right++;
     138        vertical = FALSE;
     139        break;
     140      }
     141
    159142      case SB_VERT:
     143      {
     144        Win32BaseWindow *win32wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
     145        RECT rectClient;
     146
     147        if (!win32wnd) return FALSE;
     148        rectClient = *win32wnd->getClientRectPtr();
     149        mapWin32Rect(win32wnd->getParent() ? win32wnd->getParent()->getOS2WindowHandle():OSLIB_HWND_DESKTOP,win32wnd->getOS2FrameWindowHandle(),&rectClient);
     150        lprect->left   = rectClient.right;
     151        lprect->top    = rectClient.top;
     152        lprect->right  = lprect->left+GetSystemMetrics(SM_CXVSCROLL);
     153        lprect->bottom = rectClient.bottom;
     154        if(win32wnd->getStyle() & WS_BORDER)
     155        {
     156          lprect->top--;
     157          lprect->bottom++;
     158        } else if (win32wnd->getStyle() & WS_HSCROLL)
     159          lprect->bottom++;
     160        vertical = TRUE;
     161        break;
     162      }
     163
     164      case SB_CTL:
     165      {
     166        DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE);
     167
    160168        GetClientRect( hwnd, lprect );
    161         vertical = (nBar == SB_VERT);
     169        vertical = ((dwStyle & SBS_VERT) != 0);
    162170        break;
    163 
    164       case SB_CTL:
    165         {
    166           DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE);
    167 
    168           GetClientRect( hwnd, lprect );
    169           vertical = ((dwStyle & SBS_VERT) != 0);
    170           break;
    171         }
     171      }
    172172
    173173    default:
     
    566566 * Redraw the whole scrollbar.
    567567 */
    568 void SCROLL_DrawScrollBar( HWND hwnd, HDC hdc, INT nBar,
    569                            BOOL arrows, BOOL interior )
     568void SCROLL_DrawScrollBar(HWND hwnd,HDC hdc,INT nBar,BOOL arrows,BOOL interior)
    570569{
    571570    INT arrowSize, thumbSize, thumbPos;
     
    584583        HBRUSH hBrush;
    585584
    586         hdc = GetDC(hwnd);
     585        hdc = GetDCEx(hwnd,0,DCX_CACHE | ((nBar == SB_CTL) ? 0 : DCX_WINDOW));
    587586        hBrush = GetSysColorBrush(COLOR_3DFACE);
    588587        GetClientRect(hwnd,&rect);
     
    635634                                     BOOL arrows, BOOL interior )
    636635{
    637   Win32BaseWindow *window;
    638   HDC hdc;
    639 
    640 
    641     hdc = GetDC(hwnd);
    642 
    643     if (!hdc) return;
    644 
    645     SCROLL_DrawScrollBar( hwnd, hdc, nBar, arrows, interior );
    646     ReleaseDC( hwnd, hdc );
     636  HDC hdc = GetDCEx(hwnd,0,DCX_CACHE | ((nBar == SB_CTL) ? 0:DCX_WINDOW));
     637
     638  if (!hdc) return;
     639
     640  SCROLL_DrawScrollBar( hwnd, hdc, nBar, arrows, interior );
     641  ReleaseDC( hwnd, hdc );
    647642}
    648643
     
    763758
    764759    vertical = SCROLL_GetScrollBarRect(hwnd,nBar,&rect,&arrowSize,&thumbSize,&thumbPos);
    765     if (nBar == SB_CTL) hwndOwner = GetParent(hwnd); else
    766     {
    767       Win32BaseWindow *win32wnd;
    768       HWND hwndFrame;
    769 
    770       win32wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
    771       if (!win32wnd) return res;
    772       hwndFrame = OSLibWinQueryWindow(win32wnd->getOS2WindowHandle(),QWOS_OWNER);
    773       win32wnd = Win32BaseWindow::GetWindowFromOS2FrameHandle(hwndFrame);
    774       if (!win32wnd) return res;
    775       hwndOwner = win32wnd->getWindowHandle();
    776     }
     760    hwndOwner = (nBar == SB_CTL) ? GetParent(hwnd):hwnd;
    777761
    778762    hwndCtl = (nBar == SB_CTL) ? hwnd:0;
     
    795779        if ((SCROLL_FocusWin == hwnd) && SCROLL_Highlighted)
    796780        {
    797           hdc = GetDC(hwnd);
     781          hdc = GetDCEx(hwnd,0,DCX_CACHE | ((nBar == SB_CTL) ? 0:DCX_WINDOW));
    798782          SCROLL_DrawScrollBar(hwnd,hdc,nBar,FALSE,TRUE);
    799783          ReleaseDC(hwnd,hdc);
     
    854838          {
    855839            SCROLL_Highlighted = FALSE;
    856             hdc = GetDC(hwnd);
     840            hdc = GetDCEx(hwnd,0,DCX_CACHE | ((nBar == SB_CTL) ? 0:DCX_WINDOW));
    857841            SCROLL_DrawScrollBar(hwnd,hdc,nBar,FALSE,TRUE);
    858842            ReleaseDC(hwnd,hdc);
     
    873857          if (!SCROLL_Scrolling)
    874858          {
    875             hdc = GetDC(hwnd);
     859            hdc = GetDCEx(hwnd,0,DCX_CACHE | ((nBar == SB_CTL) ? 0 : DCX_WINDOW));
    876860            SCROLL_DrawScrollBar(hwnd,hdc,nBar,FALSE,TRUE);
    877861            ReleaseDC(hwnd,hdc);
     
    884868    }
    885869
    886     hdc = GetDC(hwnd);
     870    hdc = GetDCEx(hwnd,0,DCX_CACHE | ((nBar == SB_CTL) ? 0 : DCX_WINDOW));
    887871
    888872    switch(SCROLL_trackHitTest)
     
    11031087  INT oldPos = infoPtr->CurVal;
    11041088
    1105   SetScrollRange((nBar == SB_CTL) ? hwnd:SCROLL_GetFrameHandle(hwnd),nBar,wParam,lParam,redraw);
     1089  SetScrollRange(hwnd,nBar,wParam,lParam,redraw);
    11061090  return (oldPos != infoPtr->CurVal) ? infoPtr->CurVal:0;
    11071091}
     
    11891173}
    11901174
    1191 /* frame handlers */
    1192 
    1193 VOID SCROLL_SubclassScrollBars(HWND hwndHorz,HWND hwndVert)
    1194 {
    1195   if (hwndHorz) SetWindowLongA(hwndHorz,GWL_WNDPROC,(ULONG)HorzScrollBarWndProc);
    1196   if (hwndVert) SetWindowLongA(hwndVert,GWL_WNDPROC,(ULONG)VertScrollBarWndProc);
    1197 }
    1198 
    1199 LRESULT WINAPI HorzScrollBarWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam )
    1200 {
    1201   switch (message)
    1202   {
    1203     case WM_LBUTTONDOWN:
    1204     case WM_LBUTTONUP:
    1205     case WM_NCHITTEST:
    1206     case WM_CAPTURECHANGED:
    1207     case WM_MOUSEMOVE:
    1208     case WM_SYSTIMER:
    1209     case WM_SETFOCUS:
    1210     case WM_KILLFOCUS:
    1211       return SCROLL_HandleScrollEvent(hwnd,wParam,lParam,SB_HORZ,message);
    1212 
    1213     case WM_ERASEBKGND:
    1214       return 1;
    1215 
    1216     case WM_GETDLGCODE:
    1217       return DLGC_WANTARROWS; /* Windows returns this value */
    1218 
    1219     case WM_PAINT:
    1220       return SCROLL_Paint(hwnd,wParam,lParam,SB_HORZ);
    1221 
    1222     case SBM_SETPOS:
    1223       return SetScrollPos(SCROLL_GetFrameHandle(hwnd),SB_HORZ,wParam,(BOOL)lParam);
    1224 
    1225     case SBM_GETPOS:
    1226       return GetScrollPos(SCROLL_GetFrameHandle(hwnd),SB_HORZ);
    1227 
    1228     case SBM_SETRANGE:
    1229       return SCROLL_SetRange(hwnd,wParam,lParam,SB_HORZ,FALSE);
    1230 
    1231     case SBM_GETRANGE:
    1232       GetScrollRange(SCROLL_GetFrameHandle(hwnd),SB_HORZ,(LPINT)wParam,(LPINT)lParam);
    1233       return 0;
    1234 
    1235     case SBM_ENABLE_ARROWS:
    1236       return EnableScrollBar(SCROLL_GetFrameHandle(hwnd),SB_HORZ,wParam);
    1237 
    1238     case SBM_SETRANGEREDRAW:
    1239       return SCROLL_SetRange(hwnd,wParam,lParam,SB_HORZ,TRUE);
    1240 
    1241     case SBM_SETSCROLLINFO:
    1242       return SetScrollInfo(SCROLL_GetFrameHandle(hwnd),SB_HORZ,(SCROLLINFO*)lParam,wParam);
    1243 
    1244     case SBM_GETSCROLLINFO:
    1245       return GetScrollInfo(SCROLL_GetFrameHandle(hwnd),SB_HORZ,(SCROLLINFO*)lParam);
    1246 
    1247     default:
    1248       return DefWindowProcA(hwnd,message,wParam,lParam);
    1249   }
    1250 
    1251   return 0;
    1252 }
    1253 
    1254 LRESULT WINAPI VertScrollBarWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam )
    1255 {
    1256   switch (message)
    1257   {
    1258     case WM_LBUTTONDOWN:
    1259     case WM_LBUTTONUP:
    1260     case WM_NCHITTEST:
    1261     case WM_CAPTURECHANGED:
    1262     case WM_MOUSEMOVE:
    1263     case WM_SYSTIMER:
    1264     case WM_SETFOCUS:
    1265     case WM_KILLFOCUS:
    1266       return SCROLL_HandleScrollEvent(hwnd,wParam,lParam,SB_VERT,message);
    1267 
    1268     case WM_ERASEBKGND:
    1269       return 1;
    1270 
    1271     case WM_GETDLGCODE:
    1272       return DLGC_WANTARROWS; /* Windows returns this value */
    1273 
    1274     case WM_PAINT:
    1275       return SCROLL_Paint(hwnd,wParam,lParam,SB_VERT);
    1276 
    1277     case SBM_SETPOS:
    1278       return SetScrollPos(SCROLL_GetFrameHandle(hwnd),SB_VERT,wParam,(BOOL)lParam);
    1279 
    1280     case SBM_GETPOS:
    1281       return GetScrollPos(SCROLL_GetFrameHandle(hwnd),SB_VERT);
    1282 
    1283     case SBM_SETRANGE:
    1284       return SCROLL_SetRange(hwnd,wParam,lParam,SB_VERT,FALSE);
    1285 
    1286     case SBM_GETRANGE:
    1287       GetScrollRange(SCROLL_GetFrameHandle(hwnd),SB_VERT,(LPINT)wParam,(LPINT)lParam);
    1288       return 0;
    1289 
    1290     case SBM_ENABLE_ARROWS:
    1291       return EnableScrollBar(SCROLL_GetFrameHandle(hwnd),SB_VERT,wParam);
    1292 
    1293     case SBM_SETRANGEREDRAW:
    1294       return SCROLL_SetRange(hwnd,wParam,lParam,SB_VERT,TRUE);
    1295 
    1296     case SBM_SETSCROLLINFO:
    1297       return SetScrollInfo(SCROLL_GetFrameHandle(hwnd),SB_VERT,(SCROLLINFO*)lParam,wParam);
    1298 
    1299     case SBM_GETSCROLLINFO:
    1300       return GetScrollInfo(SCROLL_GetFrameHandle(hwnd),SB_VERT,(SCROLLINFO*)lParam);
    1301 
    1302     default:
    1303       return DefWindowProcA(hwnd,message,wParam,lParam);
    1304   }
    1305 
    1306   return 0;
    1307 }
    1308 
    13091175/* Scrollbar API */
    13101176
     
    13311197    UINT new_flags;
    13321198    INT action = 0;
    1333     HWND hwndScroll = SCROLL_GetScrollHandle(hwnd,nBar);
    13341199
    13351200    dprintf(("USER32: SetScrollInfo"));
    13361201
    1337     if (!hwndScroll) return 0;
    1338     if (!(infoPtr = SCROLL_GetInfoPtr(hwndScroll,nBar))) return 0;
     1202    if (!(infoPtr = SCROLL_GetInfoPtr(hwnd,nBar))) return 0;
    13391203    if (info->fMask & ~(SIF_ALL | SIF_DISABLENOSCROLL)) return 0;
    13401204    if ((info->cbSize != sizeof(*info)) &&
     
    14451309        {
    14461310          if (action & SA_SSI_REFRESH)
    1447             SCROLL_RefreshScrollBar(hwndScroll,nBar,TRUE,TRUE);
     1311            SCROLL_RefreshScrollBar(hwnd,nBar,TRUE,TRUE);
    14481312          else
    14491313          {
    14501314            if (action & (SA_SSI_REPAINT_INTERIOR | SA_SSI_MOVE_THUMB))
    1451               SCROLL_RefreshScrollBar(hwndScroll,nBar,FALSE,TRUE);
     1315              SCROLL_RefreshScrollBar(hwnd,nBar,FALSE,TRUE);
    14521316            if (action & SA_SSI_REPAINT_ARROWS)
    1453               SCROLL_RefreshScrollBar(hwndScroll,nBar,TRUE,FALSE);
     1317              SCROLL_RefreshScrollBar(hwnd,nBar,TRUE,FALSE);
    14541318          }
    14551319        }
     
    14731337{
    14741338  SCROLLBAR_INFO *infoPtr;
    1475   HWND hwndScroll;
    14761339
    14771340    dprintf(("USER32: GetScrollInfo"));
    14781341
    1479     hwndScroll = SCROLL_GetScrollHandle(hwnd,nBar);
    1480     if (!hwndScroll || !(infoPtr = SCROLL_GetInfoPtr(hwndScroll,nBar))) return FALSE;
     1342    if (!(infoPtr = SCROLL_GetInfoPtr(hwnd,nBar))) return FALSE;
    14811343    if (info->fMask & ~(SIF_ALL | SIF_DISABLENOSCROLL)) return FALSE;
    14821344    if ((info->cbSize != sizeof(*info)) &&
     
    14861348    if (info->fMask & SIF_POS) info->nPos = infoPtr->CurVal;
    14871349    if ((info->fMask & SIF_TRACKPOS) && (info->cbSize == sizeof(*info)))
    1488       info->nTrackPos = (SCROLL_MovingThumb && SCROLL_TrackingWin == hwndScroll && SCROLL_TrackingBar == nBar) ? SCROLL_TrackingVal:infoPtr->CurVal;
     1350      info->nTrackPos = (SCROLL_MovingThumb && SCROLL_TrackingWin == hwnd && SCROLL_TrackingBar == nBar) ? SCROLL_TrackingVal:infoPtr->CurVal;
    14891351
    14901352    if (info->fMask & SIF_RANGE)
     
    15171379
    15181380    dprintf(("SetScrollPos %x %d %d %d", hwnd, nBar, nPos, bRedraw));
    1519     if (!(infoPtr = SCROLL_GetInfoPtr(SCROLL_GetScrollHandle(hwnd,nBar),nBar))) return 0;
     1381    if (!(infoPtr = SCROLL_GetInfoPtr(hwnd,nBar))) return 0;
    15201382    oldPos      = infoPtr->CurVal;
    15211383    info.cbSize = sizeof(info);
     
    15441406    dprintf(("GetScrollPos %x %d", hwnd, nBar));
    15451407
    1546     infoPtr = SCROLL_GetInfoPtr(SCROLL_GetScrollHandle(hwnd,nBar),nBar);
     1408    infoPtr = SCROLL_GetInfoPtr(hwnd,nBar);
    15471409    if (!infoPtr) return 0;
    15481410
     
    15861448  SCROLLBAR_INFO *infoPtr;
    15871449
    1588     infoPtr = SCROLL_GetInfoPtr(SCROLL_GetScrollHandle(hwnd,nBar),nBar);
     1450    infoPtr = SCROLL_GetInfoPtr(hwnd,nBar);
    15891451    if (!infoPtr)
    15901452    {
     
    16081470                    BOOL fShow  /* [I] TRUE = show, FALSE = hide  */)
    16091471{
     1472    Win32BaseWindow *win32wnd = Win32BaseWindow::GetWindowFromHandle(hwnd);
     1473    BOOL fShowH = (nBar == SB_HORZ) ? 0:fShow,fShowV = (nBar == SB_VERT) ? 0:fShow;
     1474
    16101475    dprintf(("ShowScrollBar %04x %d %d\n", hwnd, nBar, fShow));
    1611 
    1612     if (nBar == SB_CTL)
    1613     {
    1614       ShowWindow(hwnd,fShow ? SW_SHOW:SW_HIDE);
    1615 
    1616       return TRUE;
    1617     } else
    1618     {
    1619       Win32BaseWindow *window = Win32BaseWindow::GetWindowFromHandle(hwnd);
    1620       BOOL createHorz = FALSE,createVert = FALSE;
    1621 
    1622       if (!window)
    1623       {
    1624         dprintf(("ShowScrollBar window not found!"));
    1625         SetLastError(ERROR_INVALID_WINDOW_HANDLE);
    1626         return FALSE;
    1627       }
    1628 
    1629       return window->showScrollBars(nBar == SB_HORZ || nBar == SB_BOTH,nBar == SB_VERT || nBar == SB_BOTH,fShow);
     1476    if (!win32wnd) return FALSE;
     1477
     1478    switch(nBar)
     1479    {
     1480     case SB_CTL:
     1481       ShowWindow(hwnd,fShow ? SW_SHOW:SW_HIDE);
     1482       return TRUE;
     1483
     1484      case SB_BOTH:
     1485      case SB_HORZ:
     1486        if (fShow)
     1487        {
     1488            fShowH = !(win32wnd->getStyle() & WS_HSCROLL);
     1489            win32wnd->setStyle(win32wnd->getStyle() | WS_HSCROLL);
     1490        }
     1491        else  /* hide it */
     1492        {
     1493            fShowH = (win32wnd->getStyle() & WS_HSCROLL);
     1494            win32wnd->setStyle(win32wnd->getStyle() & ~WS_HSCROLL);
     1495        }
     1496        if( nBar == SB_HORZ )
     1497        {
     1498            fShowV = FALSE;
     1499            break;
     1500        }
     1501        /* fall through */
     1502
     1503    case SB_VERT:
     1504        if (fShowV)
     1505        {
     1506            fShowV = !(win32wnd->getStyle() & WS_VSCROLL);
     1507            win32wnd->setStyle(win32wnd->getStyle() | WS_VSCROLL);
     1508        }
     1509        else  /* hide it */
     1510        {
     1511            fShowV = (win32wnd->getStyle() & WS_VSCROLL);
     1512            win32wnd->setStyle(win32wnd->getStyle() & ~WS_VSCROLL);
     1513        }
     1514        if ( nBar == SB_VERT )
     1515           fShowH = FALSE;
     1516        break;
     1517
     1518    default:
     1519        return TRUE;  /* Nothing to do! */
     1520    }
     1521
     1522    if( fShowH || fShowV ) /* frame has been changed, let the window redraw itself */
     1523    {
     1524        SetWindowPos( hwnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE
     1525                    | SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED );
    16301526    }
    16311527
     
    16381534BOOL WINAPI EnableScrollBar( HWND hwnd, INT nBar, UINT flags)
    16391535{
    1640   Win32BaseWindow *window;
    1641   SCROLLBAR_INFO *infoPtr;
    1642 
    1643   dprintf(("EnableScrollBar %04x %d %d\n", hwnd, nBar, flags));
    1644 
    1645   if (nBar == SB_CTL)
    1646   {
    1647     if (!(infoPtr = SCROLL_GetInfoPtr(hwnd,nBar))) return FALSE;
    1648 
    1649     if (infoPtr->flags != flags)
    1650     {
    1651       infoPtr->flags = flags;
    1652       SCROLL_RefreshScrollBar(hwnd,nBar,TRUE,TRUE);
    1653     }
    1654 
     1536    BOOL bFineWithMe;
     1537    SCROLLBAR_INFO *infoPtr;
     1538
     1539    dprintf(("EnableScrollBar %04x %d %d\n", hwnd, nBar, flags));
     1540
     1541    flags &= ESB_DISABLE_BOTH;
     1542
     1543    if (nBar == SB_BOTH)
     1544    {
     1545        if (!(infoPtr = SCROLL_GetInfoPtr( hwnd, SB_VERT ))) return FALSE;
     1546        if (!(bFineWithMe = (infoPtr->flags == flags)) )
     1547        {
     1548            infoPtr->flags = flags;
     1549            SCROLL_RefreshScrollBar( hwnd, SB_VERT, TRUE, TRUE );
     1550        }
     1551        nBar = SB_HORZ;
     1552    }
     1553    else
     1554        bFineWithMe = TRUE;
     1555
     1556    if (!(infoPtr = SCROLL_GetInfoPtr( hwnd, nBar ))) return FALSE;
     1557    if (bFineWithMe && infoPtr->flags == flags) return FALSE;
     1558    infoPtr->flags = flags;
     1559
     1560    SCROLL_RefreshScrollBar( hwnd, nBar, TRUE, TRUE );
    16551561    return TRUE;
    1656   } else
    1657   {
    1658     Win32BaseWindow *window = Win32BaseWindow::GetWindowFromHandle(hwnd);
    1659 
    1660     if(!window)
    1661     {
    1662       dprintf(("EnableScrollBar window not found!"));
    1663       SetLastError(ERROR_INVALID_WINDOW_HANDLE);
    1664       return FALSE;
    1665     }
    1666 
    1667     if(window->getStyle() & (WS_HSCROLL | WS_VSCROLL))
    1668     {
    1669       BOOL rc = FALSE;
    1670 
    1671       if (((nBar == SB_VERT) || (nBar == SB_BOTH)) && (window->getStyle() & WS_VSCROLL))
    1672       {
    1673         HWND hwndScroll =  Win32BaseWindow::OS2ToWin32Handle(window->getVertScrollHandle());
    1674 
    1675         infoPtr = SCROLL_GetInfoPtr(hwndScroll,SB_VERT);
    1676         if (infoPtr)
    1677         {
    1678           if (infoPtr->flags != flags)
    1679           {
    1680             infoPtr->flags = flags;
    1681             SCROLL_RefreshScrollBar(hwndScroll,nBar,TRUE,TRUE);
    1682           }
    1683 
    1684           rc = TRUE;
    1685         }
    1686       }
    1687       if (((nBar == SB_HORZ) || (rc && (nBar == SB_BOTH))) && (window->getStyle() & WS_HSCROLL))
    1688       {
    1689         HWND hwndScroll =  Win32BaseWindow::OS2ToWin32Handle(window->getHorzScrollHandle());
    1690 
    1691         infoPtr = SCROLL_GetInfoPtr(hwndScroll,SB_VERT);
    1692         if (infoPtr)
    1693         {
    1694           if (infoPtr->flags != flags)
    1695           {
    1696             infoPtr->flags = flags;
    1697             SCROLL_RefreshScrollBar(hwndScroll,nBar,TRUE,TRUE);
    1698           }
    1699 
    1700           rc = TRUE;
    1701         }
    1702       }
    1703 
    1704       return rc;
    1705     }
    1706   }
    1707 
    1708   return TRUE;
    17091562}
    17101563
     
    17201573  }
    17211574
    1722   HWND hwndScroll;
    17231575  INT nBar,arrowSize;
    17241576
     
    17271579    case OBJID_CLIENT:
    17281580      nBar = SB_CTL;
    1729       hwndScroll = hwnd;
    17301581      break;
    17311582
    17321583    case OBJID_HSCROLL:
    17331584      nBar = SB_HORZ;
    1734       hwndScroll = SCROLL_GetScrollHandle(hwnd,SB_HORZ);
    17351585      break;
    17361586
    17371587    case OBJID_VSCROLL:
    17381588      nBar = SB_VERT;
    1739       hwndScroll = SCROLL_GetScrollHandle(hwnd,SB_VERT);
    17401589      break;
    17411590
     
    17441593  }
    17451594
    1746   if (!hwndScroll) return FALSE;
    1747 
    1748   SCROLL_GetScrollBarRect(hwndScroll,nBar,&psbi->rcScrollBar,&arrowSize,&psbi->dxyLineButton,&psbi->xyThumbTop);
     1595  SCROLL_GetScrollBarRect(hwnd,nBar,&psbi->rcScrollBar,&arrowSize,&psbi->dxyLineButton,&psbi->xyThumbTop);
    17491596  psbi->xyThumbBottom = psbi->xyThumbTop+psbi->dxyLineButton;
    17501597  psbi->bogus = 0; //CB: undocumented!
    1751   psbi->rgstate[0] = IsWindowVisible(hwndScroll) ? STATE_SYSTEM_INVISIBLE:0;
     1598  psbi->rgstate[0] = IsWindowVisible(hwnd) ? STATE_SYSTEM_INVISIBLE:0;
    17521599  psbi->rgstate[1] = psbi->rgstate[2] = psbi->rgstate[3] = psbi->rgstate[4] = psbi->rgstate[5] = psbi->rgstate[0]; //CB: todo
    17531600
  • TabularUnified trunk/src/user32/new/win32wbase.cpp

    r2377 r2381  
    1 /* $Id: win32wbase.cpp,v 1.25 2000-01-08 16:47:48 cbratschi Exp $ */
     1/* $Id: win32wbase.cpp,v 1.26 2000-01-09 14:14:24 cbratschi Exp $ */
    22/*
    33 * Win32 Window Base Class for OS/2
     
    4444#include "winmouse.h"
    4545#include <win\hook.h>
     46#include <shellapi.h>
    4647#define INCL_TIMERWIN32
    4748#include "timer.h"
     49
     50#define SC_ABOUTWINE            (SC_SCREENSAVE+1)
     51#define SC_PUTMARK              (SC_SCREENSAVE+2)
    4852
    4953#define HAS_DLGFRAME(style,exStyle) \
     
    5357#define HAS_THICKFRAME(style,exStyle) \
    5458    (((style) & WS_THICKFRAME) && \
    55      !((exStyle) & WS_EX_DLGMODALFRAME))
     59     !((exStyle) & WS_EX_DLGMODALFRAME) && \
     60     !((style) & WS_CHILD))
    5661
    5762#define HAS_THINFRAME(style) \
     
    183188  OS2Hwnd          = 0;
    184189  OS2HwndFrame     = 0;
    185   OS2HwndMenu      = 0;
     190  hMenu            = 0;
     191  hSysMenu         = 0;
    186192  Win32Hwnd        = 0;
    187193
     
    223229  horzScrollInfo     = NULL;
    224230  vertScrollInfo     = NULL;
    225   hwndHorzScroll     = 0;
    226   hwndVertScroll     = 0;
    227231
    228232  ownDC              = 0;
     
    644648
    645649  OSLibWinSetOwner(OS2Hwnd, OS2HwndFrame);
    646 
    647   //FrameGetScrollBarHandles(this,dwStyle & WS_HSCROLL,dwStyle & WS_VSCROLL);
    648   //subclassScrollBars(dwStyle & WS_HSCROLL,dwStyle & WS_VSCROLL);
    649650
    650651  fakeWinBase.hwndThis     = OS2Hwnd;
     
    12231224//******************************************************************************
    12241225//******************************************************************************
    1225 VOID Win32BaseWindow::subclassScrollBars(BOOL subHorz,BOOL subVert)
    1226 {
    1227   SCROLL_SubclassScrollBars(subHorz ? hwndHorzScroll:0,subVert ? hwndVertScroll:0);
    1228 }
    1229 //******************************************************************************
    1230 //******************************************************************************
    1231 BOOL Win32BaseWindow::showScrollBars(BOOL changeHorz,BOOL changeVert,BOOL fShow)
    1232 {
    1233   BOOL rc = TRUE;
    1234   DWORD flags = 0;
    1235 
    1236   if (fShow)
    1237   {
    1238     BOOL createHorz = FALSE,createVert = FALSE;
    1239     BOOL showHorz = FALSE,showVert = FALSE;
    1240 
    1241     if (changeHorz)
    1242     {
    1243       if (!hwndHorzScroll)
    1244         createHorz = TRUE;
    1245       else
    1246         showHorz = TRUE;
    1247     }
    1248 
    1249     if (changeVert)
    1250     {
    1251       if (!hwndVertScroll)
    1252         createVert = TRUE;
    1253       else
    1254         showVert = TRUE;
    1255     }
    1256 
    1257     if (createHorz || createVert)
    1258     {
    1259       if (createHorz && !horzScrollInfo)
    1260       {
    1261         horzScrollInfo = (SCROLLBAR_INFO*)malloc(sizeof(SCROLLBAR_INFO));
    1262         horzScrollInfo->MinVal = horzScrollInfo->CurVal = horzScrollInfo->Page = 0;
    1263         horzScrollInfo->MaxVal = 100;
    1264         horzScrollInfo->flags  = ESB_ENABLE_BOTH;
    1265       }
    1266 
    1267       if (createVert && !vertScrollInfo)
    1268       {
    1269         vertScrollInfo = (SCROLLBAR_INFO*)malloc(sizeof(SCROLLBAR_INFO));
    1270         vertScrollInfo->MinVal = vertScrollInfo->CurVal = vertScrollInfo->Page = 0;
    1271         vertScrollInfo->MaxVal = 100;
    1272         vertScrollInfo->flags  = ESB_ENABLE_BOTH;
    1273       }
    1274 
    1275       rc = FrameCreateScrollBars(this,createHorz,createVert,FALSE,&flags);
    1276 
    1277       if (!rc) return FALSE;
    1278       if (createHorz) dwStyle |= WS_HSCROLL;
    1279       if (createVert) dwStyle |= WS_VSCROLL;
    1280     }
    1281 
    1282     if (showVert || showHorz)
    1283     {
    1284       DWORD newFlags;
    1285 
    1286       rc = FrameShowScrollBars(this,showHorz,showVert,fShow,FALSE,&newFlags);
    1287       flags |= newFlags;
    1288       if (rc)
    1289       {
    1290         if (showHorz) dwStyle |= WS_HSCROLL;
    1291         if (showVert) dwStyle |= WS_VSCROLL;
    1292       }
    1293     }
    1294 
    1295     if (flags) FrameUpdateFrame(this,flags);
    1296   } else
    1297   {
    1298     rc = FrameShowScrollBars(this,changeHorz && hwndHorzScroll,changeVert && hwndVertScroll,fShow,TRUE);
    1299 
    1300     if (rc)
    1301     {
    1302       if (changeHorz) dwStyle &= ~WS_HSCROLL;
    1303       if (changeVert) dwStyle &= ~WS_VSCROLL;
    1304     }
    1305   }
    1306 
    1307   return rc;
    1308 }
    1309 //******************************************************************************
    1310 //******************************************************************************
    13111226LONG Win32BaseWindow::HandleNCActivate(WPARAM wParam)
    13121227{
     
    14291344//******************************************************************************
    14301345//******************************************************************************
     1346VOID Win32BaseWindow::TrackScrollBar(WPARAM wParam,POINT pt)
     1347{
     1348  INT scrollbar;
     1349  MSG msg;
     1350
     1351  if ((wParam & 0xfff0) == SC_HSCROLL)
     1352  {
     1353    if ((wParam & 0x0f) != HTHSCROLL) return;
     1354    scrollbar = SB_HORZ;
     1355  } else  /* SC_VSCROLL */
     1356  {
     1357    if ((wParam & 0x0f) != HTVSCROLL) return;
     1358    scrollbar = SB_VERT;
     1359  }
     1360
     1361  pt.x -= rectWindow.left;
     1362  pt.y -= rectWindow.top;
     1363  SCROLL_HandleScrollEvent(Win32Hwnd,0,MAKELONG(pt.x,pt.y),scrollbar,WM_LBUTTONDOWN);
     1364  if (GetCapture() != Win32Hwnd) return;
     1365  do
     1366  {
     1367    GetMessageA(&msg,Win32Hwnd,0,0);
     1368    switch(msg.message)
     1369    {
     1370      case WM_LBUTTONUP:
     1371      case WM_MOUSEMOVE:
     1372        pt.x = msg.pt.x-rectWindow.left;
     1373        pt.y = msg.pt.y-rectWindow.top;
     1374        msg.lParam = MAKELONG(pt.x,pt.y);
     1375      case WM_SYSTIMER:
     1376        SCROLL_HandleScrollEvent(Win32Hwnd,msg.wParam,msg.lParam,scrollbar,msg.message);
     1377        break;
     1378
     1379      default:
     1380        TranslateMessage(&msg);
     1381        DispatchMessageA(&msg);
     1382        break;
     1383    }
     1384    if (!IsWindow())
     1385    {
     1386      ReleaseCapture();
     1387      break;
     1388    }
     1389  } while (msg.message != WM_LBUTTONUP);
     1390}
     1391//******************************************************************************
     1392//******************************************************************************
    14311393LONG Win32BaseWindow::HandleNCLButtonDown(WPARAM wParam,LPARAM lParam)
    14321394{
     
    18241786    if(hIcon == 0)
    18251787      if (!(dwStyle & DS_MODALFRAME))
    1826         hIcon = LoadImageA(0, MAKEINTRESOURCEA(OIC_WINEICON), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR);
     1788        hIcon = LoadImageA(0, MAKEINTRESOURCEA(OIC_ODINICON), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR);
    18271789
    18281790    if (hIcon)
     
    19861948  r.bottom--;
    19871949
    1988   FillRect( hdc, &r, GetSysColorBrush(active ? COLOR_ACTIVECAPTION : COLOR_INACTIVECAPTION) );
     1950  //CB: todo:
     1951   //COLOR_GRADIENTACTIVECAPTION
     1952   //COLOR_GRADIENTINACTIVECAPTION
     1953
     1954  FillRect(hdc,&r,GetSysColorBrush(active ? COLOR_ACTIVECAPTION:COLOR_INACTIVECAPTION));
    19891955
    19901956  if (!hbitmapClose)
     
    21352101
    21362102  /* Draw the scroll-bars */
    2137 #if 0 //CB: todo
    21382103  if (dwStyle & WS_VSCROLL)
    2139     SCROLL_DrawScrollBar(hwnd,hdc,SB_VERT,TRUE,TRUE);
    2140   if (wndPtr->dwStyle & WS_HSCROLL)
    2141     SCROLL_DrawScrollBar(hwnd,hdc,SB_HORZ,TRUE,TRUE);
    2142 #endif
     2104    SCROLL_DrawScrollBar(Win32Hwnd,hdc,SB_VERT,TRUE,TRUE);
     2105  if (dwStyle & WS_HSCROLL)
     2106    SCROLL_DrawScrollBar(Win32Hwnd,hdc,SB_HORZ,TRUE,TRUE);
     2107
    21432108  /* Draw the "size-box" */
    21442109  if ((dwStyle & WS_VSCROLL) && (dwStyle & WS_HSCROLL))
     
    22472212 * TODO: Not done (see #if 0)
    22482213 */
    2249 LONG Win32BaseWindow::HandleSysCommand(WPARAM wParam, POINT *pt32)
     2214LONG Win32BaseWindow::HandleSysCommand(WPARAM wParam,POINT *pt32)
    22502215{
    22512216    UINT uCommand = wParam & 0xFFF0;
    22522217
     2218/* //CB: don't need this, perhaps recycle for menus
    22532219    if ((getStyle() & WS_CHILD) && (uCommand != SC_KEYMENU))
    22542220        ScreenToClient(getParent()->getWindowHandle(), pt32 );
    2255 
     2221*/
    22562222    switch (uCommand)
    22572223    {
     
    23162282
    23172283    case SC_CLOSE:
    2318         return SendInternalMessageA(WM_CLOSE, 0, 0);
    2319 
    2320 #if 0
     2284        return SendInternalMessageA(WM_CLOSE,0,0);
     2285
    23212286    case SC_VSCROLL:
    23222287    case SC_HSCROLL:
    2323         NC_TrackScrollBar( hwnd, wParam, pt32 );
     2288        TrackScrollBar(wParam,*pt32);
    23242289        break;
    2325 
     2290#if 0
    23262291    case SC_MOUSEMENU:
    23272292        MENU_TrackMouseMenuBar( wndPtr, wParam & 0x000F, pt32 );
     
    23312296        MENU_TrackKbdMenuBar( wndPtr , wParam , pt.x );
    23322297        break;
    2333 
     2298#endif
    23342299    case SC_TASKLIST:
    2335         WinExec( "taskman.exe", SW_SHOWNORMAL );
     2300        WinExec("taskman.exe",SW_SHOWNORMAL);
    23362301        break;
    23372302
    23382303    case SC_SCREENSAVE:
    23392304        if (wParam == SC_ABOUTWINE)
    2340             ShellAboutA(hwnd, "Odin", ODIN_RELEASE_INFO, 0);
     2305            ShellAboutA(Win32Hwnd,"Odin","Odin alpha release compiled with IBM VAC++",0);
    23412306        else
    23422307        if (wParam == SC_PUTMARK)
    23432308            dprintf(("Mark requested by user\n"));
    23442309        break;
    2345 #endif
     2310
    23462311    case SC_HOTKEY:
    23472312    case SC_ARRANGE:
     
    27192684        point.x = LOWORD(lParam);
    27202685        point.y = HIWORD(lParam);
    2721         return HandleSysCommand(wParam, &point);
     2686        return HandleSysCommand(wParam,&point);
    27222687    }
    27232688
     
    30933058        window = parentwindow;
    30943059   }
    3095 }
    3096 //******************************************************************************
    3097 //******************************************************************************
    3098 BOOL Win32BaseWindow::SetMenu(HMENU hMenu)
    3099 {
    3100 
    3101     dprintf(("SetMenu %x", hMenu));
    3102     OS2HwndMenu = OSLibWinSetMenu(OS2HwndFrame, hMenu);
    3103     if(OS2HwndMenu == 0) {
    3104         dprintf(("Win32BaseWindow::SetMenu OS2HwndMenu == 0"));
    3105         return FALSE;
    3106     }
    3107     return TRUE;
    31083060}
    31093061//******************************************************************************
  • TabularUnified trunk/src/user32/new/win32wbase.h

    r2377 r2381  
    1 /* $Id: win32wbase.h,v 1.19 2000-01-08 16:47:50 cbratschi Exp $ */
     1/* $Id: win32wbase.h,v 1.20 2000-01-09 14:14:25 cbratschi Exp $ */
    22/*
    33 * Win32 Window Base Class for OS/2
     
    160160         void   setFlags(DWORD newflags)        { flags = newflags; };
    161161
    162          HMENU  GetMenu()                           { return (HMENU) OS2HwndMenu; };
    163          BOOL   SetMenu(ULONG hMenu);
     162         HMENU  GetMenu()                           { return hMenu; };
     163         VOID   SetMenu(HMENU newMenu)              { hMenu = newMenu; };
     164         HMENU  GetSysMenu()                        { return hSysMenu; };
     165         VOID   SetSysMenu(HMENU newSysMenu)        { hSysMenu = newSysMenu; };
    164166
    165167         BOOL   SetIcon(HICON hIcon);
     
    220222
    221223 SCROLLBAR_INFO *getScrollInfo(int nBar);
    222        HWND      getVertScrollHandle()               { return hwndVertScroll; };
    223        VOID      setVertScrollHandle(HWND newHandle) { hwndVertScroll = newHandle; }
    224        HWND      getHorzScrollHandle()               { return hwndHorzScroll; };
    225        VOID      setHorzScrollHandle(HWND newHandle) { hwndHorzScroll = newHandle; }
    226        VOID      subclassScrollBars(BOOL subHorz,BOOL subVert);
    227        BOOL      showScrollBars(BOOL changeHorz,BOOL changeVert,BOOL fShow);
    228224
    229225       LRESULT  SendMessageA(ULONG msg, WPARAM wParam, LPARAM lParam);
     
    283279        HWND    OS2Hwnd;
    284280        HWND    OS2HwndFrame;
    285         HWND    OS2HwndMenu;
     281        HMENU   hMenu;
     282        HMENU   hSysMenu;
    286283        HWND    Win32Hwnd;
    287284        BOOL    isUnicode;
     
    349346SCROLLBAR_INFO *vertScrollInfo;
    350347SCROLLBAR_INFO *horzScrollInfo;
    351         HWND    hwndHorzScroll; //os/2 handle
    352         HWND    hwndVertScroll; //os/2 handle
    353348
    354349Win32WndClass  *windowClass;
     
    363358        VOID  TrackMinMaxBox(WORD wParam);
    364359        VOID  TrackCloseButton(WORD wParam);
     360        VOID  TrackScrollBar(WPARAM wParam,POINT pt);
    365361        LONG  HandleNCLButtonDown(WPARAM wParam,LPARAM lParam);
    366362        LONG  HandleNCLButtonDblClk(WPARAM wParam,LPARAM lParam);
Note: See TracChangeset for help on using the changeset viewer.