From 38cd07c431d342f9833b8295499b0dcc8023747b Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 11 Dec 2008 22:06:55 +0000 Subject: [PATCH] don't lose the scroll offset when the window is repositioned git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57262 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/headerctrl.h | 6 ++++++ src/msw/headerctrl.cpp | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/include/wx/msw/headerctrl.h b/include/wx/msw/headerctrl.h index 9a67856a85..e707cef5f3 100644 --- a/include/wx/msw/headerctrl.h +++ b/include/wx/msw/headerctrl.h @@ -60,6 +60,9 @@ private: // override wxWindow methods which must be implemented by a new control virtual wxSize DoGetBestSize() const; + virtual void DoSetSize(int x, int y, + int width, int height, + int sizeFlags = wxSIZE_AUTO); // override MSW-specific methods needed for new control virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; @@ -81,6 +84,9 @@ private: // the image list: initially NULL, created on demand wxImageList *m_imageList; + // the offset of the window used to emulate scrolling it + int m_scrollOffset; + DECLARE_NO_COPY_CLASS(wxHeaderCtrl) }; diff --git a/src/msw/headerctrl.cpp b/src/msw/headerctrl.cpp index e8ef1b4320..fd323a4a1c 100644 --- a/src/msw/headerctrl.cpp +++ b/src/msw/headerctrl.cpp @@ -50,6 +50,7 @@ extern int WXDLLIMPEXP_CORE wxMSWGetColumnClicked(NMHDR *nmhdr, POINT *ptClick); void wxHeaderCtrl::Init() { m_imageList = NULL; + m_scrollOffset = 0; } bool wxHeaderCtrl::Create(wxWindow *parent, @@ -96,6 +97,14 @@ wxHeaderCtrl::~wxHeaderCtrl() // wxHeaderCtrl scrolling // ---------------------------------------------------------------------------- +void wxHeaderCtrl::DoSetSize(int x, int y, + int w, int h, + int sizeFlags) +{ + wxHeaderCtrlBase::DoSetSize(x + m_scrollOffset, y, w - m_scrollOffset, h, + sizeFlags); +} + void wxHeaderCtrl::DoScrollHorz(int dx) { // as the native control doesn't support offsetting its contents, we use a @@ -104,7 +113,11 @@ void wxHeaderCtrl::DoScrollHorz(int dx) // itself: to be precise, offset it by the scroll increment to the left and // increment its width to still extend to the right boundary to compensate // for it (notice that dx is negative when scrolling to the right) - SetSize(GetPosition().x + dx, -1, GetSize().x - dx, -1, wxSIZE_USE_EXISTING); + m_scrollOffset += dx; + + wxHeaderCtrlBase::DoSetSize(GetPosition().x + dx, -1, + GetSize().x - dx, -1, + wxSIZE_USE_EXISTING); } // ---------------------------------------------------------------------------- -- 2.45.2