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
This commit is contained in:
Vadim Zeitlin
2008-12-11 22:06:55 +00:00
parent 3454f80227
commit 38cd07c431
2 changed files with 20 additions and 1 deletions

View File

@@ -60,6 +60,9 @@ private:
// override wxWindow methods which must be implemented by a new control // override wxWindow methods which must be implemented by a new control
virtual wxSize DoGetBestSize() const; 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 // override MSW-specific methods needed for new control
virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
@@ -81,6 +84,9 @@ private:
// the image list: initially NULL, created on demand // the image list: initially NULL, created on demand
wxImageList *m_imageList; wxImageList *m_imageList;
// the offset of the window used to emulate scrolling it
int m_scrollOffset;
DECLARE_NO_COPY_CLASS(wxHeaderCtrl) DECLARE_NO_COPY_CLASS(wxHeaderCtrl)
}; };

View File

@@ -50,6 +50,7 @@ extern int WXDLLIMPEXP_CORE wxMSWGetColumnClicked(NMHDR *nmhdr, POINT *ptClick);
void wxHeaderCtrl::Init() void wxHeaderCtrl::Init()
{ {
m_imageList = NULL; m_imageList = NULL;
m_scrollOffset = 0;
} }
bool wxHeaderCtrl::Create(wxWindow *parent, bool wxHeaderCtrl::Create(wxWindow *parent,
@@ -96,6 +97,14 @@ wxHeaderCtrl::~wxHeaderCtrl()
// wxHeaderCtrl scrolling // 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) void wxHeaderCtrl::DoScrollHorz(int dx)
{ {
// as the native control doesn't support offsetting its contents, we use a // 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 // 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 // increment its width to still extend to the right boundary to compensate
// for it (notice that dx is negative when scrolling to the right) // 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);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------