if (m_dirty) return;
     if ( !(event.Dragging() || event.ButtonDown() || event.LeftUp() || event.ButtonDClick()) ) return;
 
-    wxClientDC dc(this);
-    PrepareDC(dc);
-    wxCoord x = dc.DeviceToLogicalX( (wxCoord)event.GetX() );
-    wxCoord y = dc.DeviceToLogicalY( (wxCoord)event.GetY() );
+    int x = event.GetX();
+    int y = event.GetY();
+    CalcUnscrolledPosition( x, y, &x, &y );
 
     /* Did we actually hit an item ? */
     long hitResult = 0;
 
 long wxListMainWindow::HitTest( int x, int y, int &flags )
 {
-    wxClientDC dc(this);
-    PrepareDC(dc);
-    wxCoord cx = dc.DeviceToLogicalX( x );
-    wxCoord cy = dc.DeviceToLogicalY( y );
+    CalcUnscrolledPosition( x, y, &x, &y );
 
     wxNode *node = m_lines.First();
     int count = 0;
     while (node)
     {
         wxListLineData *line = (wxListLineData*)node->Data();
-        long ret = line->IsHit( cx, cy );
+        long ret = line->IsHit( x, y );
         if (ret & flags)
         {
             flags = (int)ret;