]> git.saurik.com Git - wxWidgets.git/commitdiff
More scrolling work.
authorDavid Webster <Dave.Webster@bhmi.com>
Mon, 7 May 2001 22:17:12 +0000 (22:17 +0000)
committerDavid Webster <Dave.Webster@bhmi.com>
Mon, 7 May 2001 22:17:12 +0000 (22:17 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10035 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/os2/window.h
src/os2/window.cpp
src/os2/wx23.def

index a3f195f75546f37e8a9bc424430c0cb418bc3fcc..323fa4570a547b98166afbb21f80b0fd5dbed62c 100644 (file)
@@ -552,7 +552,8 @@ private:
     DECLARE_NO_COPY_CLASS(wxWindow);
     DECLARE_EVENT_TABLE()
 private:
-    HWND                            m_hWndScrollBar;
+    HWND                            m_hWndScrollBarHorz;
+    HWND                            m_hWndScrollBarVert;
 
     // Virtual function hiding supression
     inline virtual bool Reparent(wxWindowBase* pNewParent)
index fb4a8cb4b76170b4d97b9d86cbac11ab51021379..1f9123f388ff1a6877b01780fb0708575a935654 100644 (file)
@@ -273,9 +273,10 @@ void wxWindow::Init()
     //
     // wxWnd
     //
-    m_hMenu         = 0L;
-    m_hWnd          = 0L;
-    m_hWndScrollBar = 0L;
+    m_hMenu             = 0L;
+    m_hWnd              = 0L;
+    m_hWndScrollBarHorz = 0L;
+    m_hWndScrollBarVert = 0L;
 
     //
     // Pass WM_GETDLGCODE to DefWindowProc()
@@ -710,51 +711,99 @@ void wxWindow::SetScrollbar(
     if (nOrient == wxHORIZONTAL )
     {
         ulStyle |= SBS_HORZ;
-        if (m_hWndScrollBar == 0L)
+        if (m_hWndScrollBarHorz == 0L)
         {
-            m_hWndScrollBar = ::WinCreateWindow( hWnd
-                                                ,WC_SCROLLBAR
-                                                ,(PSZ)NULL
-                                                ,ulStyle
-                                                ,vRect.xLeft
-                                                ,vRect.yBottom
-                                                ,vRect.xRight - vRect.xLeft
-                                                ,20
-                                                ,hWnd
-                                                ,HWND_TOP
-                                                ,-1
-                                                ,&vInfo
-                                                ,NULL
-                                               );
+            m_hWndScrollBarHorz = ::WinCreateWindow( hWnd
+                                                    ,WC_SCROLLBAR
+                                                    ,(PSZ)NULL
+                                                    ,ulStyle
+                                                    ,vRect.xLeft
+                                                    ,vRect.yBottom
+                                                    ,vRect.xRight - vRect.xLeft
+                                                    ,20
+                                                    ,hWnd
+                                                    ,HWND_TOP
+                                                    ,-1
+                                                    ,&vInfo
+                                                    ,NULL
+                                                   );
         }
         else
         {
-            ::WinSendMsg(m_hWndScrollBar, SBM_SETSCROLLBAR, (MPARAM)nPos, MPFROM2SHORT(0, (SHORT)nRange1));
+            RECTL                   vRect2;
+
+            //
+            // Only want to resize the scrollbar if it changes, otherwise
+            // we'd probably end up in a recursive loop until we crash the call stack
+            // because this method is called in a ScrolledWindow OnSize event and SWP_MOVE | SWP_SIZE
+            // generates those events.
+            //
+            ::WinQueryWindowRect(m_hWndScrollBarHorz, &vRect2);
+            if (!(vRect2.xLeft == vRect.xLeft     &&
+                  vRect2.xRight == vRect.xRight   &&
+                  vRect2.yBottom == vRect.yBottom &&
+                  vRect2.yTop == vRect.yTop
+                ) )
+            {
+                ::WinSetWindowPos( m_hWndScrollBarHorz
+                                  ,HWND_TOP
+                                  ,vRect.xLeft
+                                  ,vRect.yBottom
+                                  ,vRect.xRight - vRect.xLeft
+                                  ,20
+                                  ,SWP_ACTIVATE | SWP_MOVE | SWP_SIZE | SWP_SHOW
+                                 );
+            }
+            ::WinSendMsg(m_hWndScrollBarHorz, SBM_SETSCROLLBAR, (MPARAM)nPos, MPFROM2SHORT(0, (SHORT)nRange1));
         }
     }
     else
     {
         ulStyle |= SBS_VERT;
-        if (m_hWndScrollBar == 0L)
+        if (m_hWndScrollBarVert == 0L)
         {
-            m_hWndScrollBar = ::WinCreateWindow( hWnd
-                                                ,WC_SCROLLBAR
-                                                ,(PSZ)NULL
-                                                ,ulStyle
-                                                ,vRect.xRight - 20
-                                                ,vRect.yBottom
-                                                ,20
-                                                ,vRect.yTop - vRect.yBottom
-                                                ,hWnd
-                                                ,HWND_TOP
-                                                ,-1
-                                                ,&vInfo
-                                                ,NULL
-                                               );
+            m_hWndScrollBarVert = ::WinCreateWindow( hWnd
+                                                    ,WC_SCROLLBAR
+                                                    ,(PSZ)NULL
+                                                    ,ulStyle
+                                                    ,vRect.xRight - 20
+                                                    ,vRect.yBottom
+                                                    ,20
+                                                    ,vRect.yTop - vRect.yBottom
+                                                    ,hWnd
+                                                    ,HWND_TOP
+                                                    ,-1
+                                                    ,&vInfo
+                                                    ,NULL
+                                                   );
         }
         else
         {
-            ::WinSendMsg(m_hWndScrollBar, SBM_SETSCROLLBAR, (MPARAM)nPos, MPFROM2SHORT(0, (SHORT)nRange1));
+            RECTL                   vRect2;
+
+            //
+            // Only want to resize the scrollbar if it changes, otherwise
+            // we'd probably end up in a recursive loop until we crash the call stack
+            // because this method is called in a ScrolledWindow OnSize event and SWP_MOVE | SWP_SIZE
+            // generates those events.
+            //
+            ::WinQueryWindowRect(m_hWndScrollBarVert, &vRect2);
+            if (!(vRect2.xLeft == vRect.xLeft     &&
+                  vRect2.xRight == vRect.xRight   &&
+                  vRect2.yBottom == vRect.yBottom &&
+                  vRect2.yTop == vRect.yTop
+                ) )
+            {
+                ::WinSetWindowPos( m_hWndScrollBarVert
+                                  ,HWND_TOP
+                                  ,vRect.xRight - 20
+                                  ,vRect.yBottom
+                                  ,20
+                                  ,vRect.yTop - vRect.yBottom
+                                  ,SWP_ACTIVATE | SWP_MOVE | SWP_SIZE | SWP_SHOW
+                                 );
+            }
+            ::WinSendMsg(m_hWndScrollBarVert, SBM_SETSCROLLBAR, (MPARAM)nPos, MPFROM2SHORT(0, (SHORT)nRange1));
         }
         m_nYThumbSize = nThumbVisible;
     }
index 23d5bc3d58560495f69ecf3d3ff315daebccf97f..b563a5a96eb8326182012f0ac049b9ffd22ff872 100644 (file)
@@ -9527,8 +9527,6 @@ EXPORTS
       Initialize__20wxHtmlHelpControllerFRC8wxString
       ;wxHtmlHelpController::SetFrameParameters(const wxString&,const wxSize&,const wxPoint&,unsigned long)
       SetFrameParameters__20wxHtmlHelpControllerFRC8wxStringRC6wxSizeRC7wxPointUl
-      ;wxHtmlHelpController::SetBookBasePath(const wxString&,int)
-      SetBookBasePath__20wxHtmlHelpControllerFRC8wxStringi
       ;wxConstructorForwxHtmlHelpController()
       wxConstructorForwxHtmlHelpController__Fv
       ;wxHtmlHelpController::~wxHtmlHelpController()