]> git.saurik.com Git - wxWidgets.git/commitdiff
emulate scrolling in wxMSW header control; document the need to call ScrollWindow...
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 5 Dec 2008 22:11:27 +0000 (22:11 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 5 Dec 2008 22:11:27 +0000 (22:11 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57133 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/headerctrl.h
interface/wx/headerctrl.h
src/msw/headerctrl.cpp

index 130de040a8688bda6db3e2039c94deedf67ce2b5..8a2c388417665bcbaf04ea7fc063d21a50d87dbb 100644 (file)
@@ -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:
     // implement base class pure virtuals
     virtual unsigned int DoGetCount() const;
 private:
     // implement base class pure virtuals
     virtual unsigned int DoGetCount() const;
index fa5537a4f8c0a9e0cbef452c41b9848c4e40bcd2..4d311c62d56ff6d365737be3d04604e858540a5a 100644 (file)
@@ -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
     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.
 
     This control is implemented using the native header control under MSW
     systems and a generic implementation elsewhere.
index 9390925fec71d49f1f855758a68fd41a97a02dd1..6330b225e1e9f3e0efc8434df9ca9e74ce3aaa6e 100644 (file)
@@ -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
 // ----------------------------------------------------------------------------