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:
// implement base class pure virtuals
virtual unsigned int DoGetCount() const;
Notice that this control itself doesn't do anything other than displaying
the column headers. In particular column reordering and sorting must still
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
systems and a generic implementation elsewhere.
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
// ----------------------------------------------------------------------------