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();
|
||||
|
||||
|
||||
// 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;
|
||||
|
@@ -29,7 +29,9 @@
|
||||
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.
|
||||
|
@@ -86,6 +86,29 @@ wxHeaderCtrl::~wxHeaderCtrl()
|
||||
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
|
||||
// ----------------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user