From c8b5f745c40c24b266e58b8870915558ddf14561 Mon Sep 17 00:00:00 2001 From: David Webster Date: Mon, 7 May 2001 22:17:12 +0000 Subject: [PATCH] More scrolling work. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10035 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/os2/window.h | 3 +- src/os2/window.cpp | 119 ++++++++++++++++++++++++++++------------ src/os2/wx23.def | 2 - 3 files changed, 86 insertions(+), 38 deletions(-) diff --git a/include/wx/os2/window.h b/include/wx/os2/window.h index a3f195f755..323fa4570a 100644 --- a/include/wx/os2/window.h +++ b/include/wx/os2/window.h @@ -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) diff --git a/src/os2/window.cpp b/src/os2/window.cpp index fb4a8cb4b7..1f9123f388 100644 --- a/src/os2/window.cpp +++ b/src/os2/window.cpp @@ -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; } diff --git a/src/os2/wx23.def b/src/os2/wx23.def index 23d5bc3d58..b563a5a96e 100644 --- a/src/os2/wx23.def +++ b/src/os2/wx23.def @@ -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() -- 2.49.0