emulate scrolling in wxMSW header control; document the need to call ScrollWindow() when using it
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57133 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -46,6 +46,11 @@ public:
|
|||||||
|
|
||||||
virtual ~wxHeaderCtrl();
|
virtual ~wxHeaderCtrl();
|
||||||
|
|
||||||
|
|
||||||
|
// this method is only overridden in order to synchronize the control with
|
||||||
|
// the main window when it is scrolled
|
||||||
|
virtual void ScrollWindow(int dx, int dy, const wxRect *rect = NULL);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// implement base class pure virtuals
|
// implement base class pure virtuals
|
||||||
virtual unsigned int DoGetCount() const;
|
virtual unsigned int DoGetCount() const;
|
||||||
|
@@ -29,7 +29,9 @@
|
|||||||
Notice that this control itself doesn't do anything other than displaying
|
Notice that this control itself doesn't do anything other than displaying
|
||||||
the column headers. In particular column reordering and sorting must still
|
the column headers. In particular column reordering and sorting must still
|
||||||
be supported by the associated control displaying the real data under the
|
be supported by the associated control displaying the real data under the
|
||||||
header.
|
header. Also remember to call ScrollWindow() method of the control if the
|
||||||
|
associated data display window has a horizontal scrollbar, otherwise the
|
||||||
|
headers wouldn't align with the data when the window is scrolled.
|
||||||
|
|
||||||
This control is implemented using the native header control under MSW
|
This control is implemented using the native header control under MSW
|
||||||
systems and a generic implementation elsewhere.
|
systems and a generic implementation elsewhere.
|
||||||
|
@@ -86,6 +86,29 @@ wxHeaderCtrl::~wxHeaderCtrl()
|
|||||||
delete m_imageList;
|
delete m_imageList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxHeaderCtrl scrolling
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// as the native control doesn't support offsetting its contents, we use a hack
|
||||||
|
// here to make it appear correctly when the parent is scrolled: instead of
|
||||||
|
// scrolling or repainting we simply move the control window itself
|
||||||
|
void wxHeaderCtrl::ScrollWindow(int dx,
|
||||||
|
int WXUNUSED_UNLESS_DEBUG(dy),
|
||||||
|
const wxRect * WXUNUSED_UNLESS_DEBUG(rect))
|
||||||
|
{
|
||||||
|
// this doesn't make sense at all
|
||||||
|
wxASSERT_MSG( !dy, "header window can't be scrolled vertically" );
|
||||||
|
|
||||||
|
// this would actually be nice to support for "frozen" headers
|
||||||
|
wxASSERT_MSG( !rect, "header window can't be scrolled partially" );
|
||||||
|
|
||||||
|
// offset the window 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);
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxHeaderCtrl geometry calculation
|
// wxHeaderCtrl geometry calculation
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user