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:
@@ -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)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user