]> git.saurik.com Git - wxWidgets.git/commitdiff
Fixed some wxDragImage bugs
authorJulian Smart <julian@anthemion.co.uk>
Tue, 10 Apr 2001 21:01:40 +0000 (21:01 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Tue, 10 Apr 2001 21:01:40 +0000 (21:01 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9711 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/dragimag.tex
include/wx/generic/dragimgg.h
include/wx/msw/dragimag.h
samples/dragimag/dragimag.cpp
src/generic/dragimgg.cpp
src/msw/dragimag.cpp

index 948a6a0478a27249c062f3594bca12a3ba5342a9..f71608e08c8cfb7b65e2a357795f5cdecc2bd954 100644 (file)
@@ -92,7 +92,7 @@ have a mask.}
 
 \docparam{cursor}{Optional cursor to combine with the image.}
 
-\docparam{hotspot}{Optional position of the hotspot in the given cursor. This parameter is deprecated.}
+\docparam{hotspot}{This parameter is deprecated.}
 
 \docparam{treeCtrl}{Tree control for constructing a tree drag image.}
 
@@ -183,8 +183,7 @@ Call this to move the image to a new position. The image will only be shown if
 \helpref{wxDragImage::Show}{wxdragimageshow} has been called previously (for example
 at the start of the drag).
 
-{\it pt} is the position in window coordinates (or screen coordinates if no
-window was specified to BeginDrag.
+{\it pt} is the position in client coordinates (relative to the window specified in BeginDrag).
 
 You can move the image either when the image is hidden or shown, but in general dragging
 will be smoother if you move the image when it is shown.
index 53830a504cb6233327bceb99a1042b14a3440448..9595a2cb7d9c3f8730b24113e8cc56282912abc3 100644 (file)
@@ -97,35 +97,71 @@ public:
     // Ctors & dtor
     ////////////////////////////////////////////////////////////////////////////
 
-    wxGenericDragImage(const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0))
+    wxGenericDragImage(const wxCursor& cursor = wxNullCursor)
     {
         Init();
-        Create(cursor, hotspot);
+        Create(cursor);
     }
-    wxGenericDragImage(const wxBitmap& image, const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0))
+
+    // Deprecated version of the above
+    wxGenericDragImage(const wxCursor& cursor, const wxPoint& cursorHotspot)
+    {
+        Init();
+        Create(cursor, cursorHotspot);
+    }
+
+    wxGenericDragImage(const wxBitmap& image, const wxCursor& cursor = wxNullCursor)
+    {
+        Init();
+
+        Create(image, cursor);
+    }
+
+    // Deprecated version of the above
+    wxGenericDragImage(const wxBitmap& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
+    {
+        Init();
+
+        Create(image, cursor, cursorHotspot);
+    }
+
+    wxGenericDragImage(const wxIcon& image, const wxCursor& cursor = wxNullCursor)
+    {
+        Init();
+
+        Create(image, cursor);
+    }
+
+    // Deprecated version of the above
+    wxGenericDragImage(const wxIcon& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
     {
         Init();
 
-        Create(image, cursor, hotspot);
+        Create(image, cursor, cursorHotspot);
     }
-    wxGenericDragImage(const wxIcon& image, const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0))
+
+    wxGenericDragImage(const wxString& str, const wxCursor& cursor = wxNullCursor)
     {
         Init();
 
-        Create(image, cursor, hotspot);
+        Create(str, cursor);
     }
-    wxGenericDragImage(const wxString& str, const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0))
+
+    // Deprecated version of the above
+    wxGenericDragImage(const wxString& str, const wxCursor& cursor, const wxPoint& cursorHotspot)
     {
         Init();
 
-        Create(str, cursor, hotspot);
+        Create(str, cursor, cursorHotspot);
     }
+
     wxGenericDragImage(const wxTreeCtrl& treeCtrl, wxTreeItemId& id)
     {
         Init();
 
         Create(treeCtrl, id);
     }
+
     wxGenericDragImage(const wxListCtrl& listCtrl, long id)
     {
         Init();
@@ -145,16 +181,36 @@ public:
     ////////////////////////////////////////////////////////////////////////////
 
     // Create a drag image with a virtual image (need to override DoDrawImage, GetImageRect)
-    bool Create(const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0));
+    bool Create(const wxCursor& cursor = wxNullCursor);
+    bool Create(const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot))
+    {
+        wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument."));
+        return Create(cursor);
+    }
 
     // Create a drag image from a bitmap and optional cursor
-    bool Create(const wxBitmap& image, const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0));
+    bool Create(const wxBitmap& image, const wxCursor& cursor = wxNullCursor);
+    bool Create(const wxBitmap& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
+    {
+        wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument."));
+        return Create(image, cursor);
+    }
 
     // Create a drag image from an icon and optional cursor
-    bool Create(const wxIcon& image, const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0));
+    bool Create(const wxIcon& image, const wxCursor& cursor = wxNullCursor);
+    bool Create(const wxIcon& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
+    {
+        wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument."));
+        return Create(image, cursor);
+    }
 
     // Create a drag image from a string and optional cursor
-    bool Create(const wxString& str, const wxCursor& cursor = wxNullCursor, const wxPoint& hotspot = wxPoint(0, 0));
+    bool Create(const wxString& str, const wxCursor& cursor = wxNullCursor);
+    bool Create(const wxString& str, const wxCursor& cursor, const wxPoint& cursorHotspot)
+    {
+        wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument."));
+        return Create(str, cursor);
+    }
 
     // Create a drag image for the given tree control item
     bool Create(const wxTreeCtrl& treeCtrl, wxTreeItemId& id);
@@ -211,7 +267,7 @@ protected:
     wxIcon          m_icon;
     wxCursor        m_cursor;
     wxCursor        m_oldCursor;
-    wxPoint         m_hotspot;
+//    wxPoint         m_hotspot;
     wxPoint         m_offset; // The hostpot value passed to BeginDrag
     wxPoint         m_position;
     bool            m_isDirty;
index f4a469088ed45a140bb35915a4c1d7b2d2772c6c..bf5dbdc9faed04902a6184663c6360c2915873e4 100644 (file)
@@ -23,9 +23,8 @@
 #include "wx/treectrl.h"
 #include "wx/listctrl.h"
 
-// If 1, use a simple wxCursor instead of ImageList_SetDragCursorImage,
-// and some other simplifications
-#define wxUSE_SIMPLER_DRAGIMAGE 1
+// If 1, use a simple wxCursor instead of ImageList_SetDragCursorImage
+#define wxUSE_SIMPLER_DRAGIMAGE 0
 
 /*
   To use this class, create a wxDragImage when you start dragging, for example:
@@ -110,36 +109,65 @@ public:
     ////////////////////////////////////////////////////////////////////////////
 
     wxDragImage();
-    wxDragImage(const wxBitmap& image, const wxCursor& cursor = wxNullCursor, const wxPoint& cursorHotspot = wxPoint(0, 0))
+    wxDragImage(const wxBitmap& image, const wxCursor& cursor = wxNullCursor)
+    {
+        Init();
+
+        Create(image, cursor);
+    }
+
+    // Deprecated form of the above
+    wxDragImage(const wxBitmap& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
     {
         Init();
 
         Create(image, cursor, cursorHotspot);
     }
-    wxDragImage(const wxIcon& image, const wxCursor& cursor = wxNullCursor, const wxPoint& cursorHotspot = wxPoint(0, 0))
+
+    wxDragImage(const wxIcon& image, const wxCursor& cursor = wxNullCursor)
+    {
+        Init();
+
+        Create(image, cursor);
+    }
+
+    // Deprecated form of the above
+    wxDragImage(const wxIcon& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
     {
         Init();
 
         Create(image, cursor, cursorHotspot);
     }
-    wxDragImage(const wxString& str, const wxCursor& cursor = wxNullCursor, const wxPoint& cursorHotspot = wxPoint(0, 0))
+
+    wxDragImage(const wxString& str, const wxCursor& cursor = wxNullCursor)
+    {
+        Init();
+
+        Create(str, cursor);
+    }
+
+    // Deprecated form of the above
+    wxDragImage(const wxString& str, const wxCursor& cursor, const wxPoint& cursorHotspot)
     {
         Init();
 
         Create(str, cursor, cursorHotspot);
     }
+
     wxDragImage(const wxTreeCtrl& treeCtrl, wxTreeItemId& id)
     {
         Init();
 
         Create(treeCtrl, id);
     }
+
     wxDragImage(const wxListCtrl& listCtrl, long id)
     {
         Init();
 
         Create(listCtrl, id);
     }
+
     ~wxDragImage();
 
     // Attributes
@@ -149,13 +177,28 @@ public:
     ////////////////////////////////////////////////////////////////////////////
 
     // Create a drag image from a bitmap and optional cursor
-    bool Create(const wxBitmap& image, const wxCursor& cursor = wxNullCursor, const wxPoint& cursorHotspot = wxPoint(0, 0));
+    bool Create(const wxBitmap& image, const wxCursor& cursor = wxNullCursor);
+    bool Create(const wxBitmap& image, const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot))
+    {
+        wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument."));
+        return Create(image, cursor);
+    }
 
     // Create a drag image from an icon and optional cursor
-    bool Create(const wxIcon& image, const wxCursor& cursor = wxNullCursor, const wxPoint& cursorHotspot = wxPoint(0, 0));
+    bool Create(const wxIcon& image, const wxCursor& cursor = wxNullCursor);
+    bool Create(const wxIcon& image, const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot))
+    {
+        wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument."));
+        return Create(image, cursor);
+    }
 
     // Create a drag image from a string and optional cursor
-    bool Create(const wxString& str, const wxCursor& cursor = wxNullCursor, const wxPoint& cursorHotspot = wxPoint(0, 0));
+    bool Create(const wxString& str, const wxCursor& cursor = wxNullCursor);
+    bool Create(const wxString& str, const wxCursor& cursor, const wxPoint& WXUNUSED(cursorHotspot))
+    {
+        wxLogDebug(wxT("wxDragImage::Create: use of a cursor hotspot is now deprecated. Please omit this argument."));
+        return Create(str, cursor);
+    }
 
     // Create a drag image for the given tree control item
     bool Create(const wxTreeCtrl& treeCtrl, wxTreeItemId& id);
@@ -209,7 +252,7 @@ protected:
 #endif
 
     wxCursor        m_cursor;
-    wxPoint         m_cursorHotspot;
+//    wxPoint         m_cursorHotspot; // Obsolete
     wxPoint         m_position;
     wxWindow*       m_window;
     wxRect          m_boundingRect;
index f3b41863460c217129178e0050c93b6d02b06cde..e803877a1e3c0f2df17d1c9535c139e12837b24a 100644 (file)
@@ -25,7 +25,7 @@
 // Under Windows, change this to 1
 // to use wxGenericDragImage
 
-#define wxUSE_GENERIC_DRAGIMAGE 0
+#define wxUSE_GENERIC_DRAGIMAGE 1
 
 #if wxUSE_GENERIC_DRAGIMAGE
 #include "wx/generic/dragimgg.h"
@@ -131,10 +131,8 @@ void MyCanvas::OnMouseEvent(wxMouseEvent& event)
         if (!m_draggedShape || !m_dragImage)
             return;
 
-        wxPoint newPos(m_draggedShape->GetPosition().x + (event.GetPosition().x - m_dragStartPos.x),
-                           m_draggedShape->GetPosition().y + (event.GetPosition().y - m_dragStartPos.y));
-
-        m_draggedShape->SetPosition(newPos);
+        m_draggedShape->SetPosition(m_draggedShape->GetPosition()
+                                    + event.GetPosition() - m_dragStartPos);
 
         m_dragImage->Hide();
         m_dragImage->EndDrag();
@@ -165,9 +163,6 @@ void MyCanvas::OnMouseEvent(wxMouseEvent& event)
             if (dx <= tolerance && dy <= tolerance)
                 return;
 
-            wxPoint newPos(m_draggedShape->GetPosition().x + (event.GetPosition().x - m_dragStartPos.x),
-                           m_draggedShape->GetPosition().y + (event.GetPosition().y - m_dragStartPos.y));
-
             // Start the drag.
             m_dragMode = TEST_DRAG_DRAGGING;
 
@@ -184,20 +179,16 @@ void MyCanvas::OnMouseEvent(wxMouseEvent& event)
             {
                 case SHAPE_DRAG_BITMAP:
                 {
-                    wxPoint hotSpot(event.GetPosition().x - newPos.x, event.GetPosition().y - newPos.y);
-                    m_dragImage = new wxDragImage(m_draggedShape->GetBitmap(), wxCursor(wxCURSOR_HAND), hotSpot);
+                    m_dragImage = new wxDragImage(m_draggedShape->GetBitmap(), wxCursor(wxCURSOR_HAND));
                     break;
                 }
                 case SHAPE_DRAG_TEXT:
                 {
-                    wxPoint hotSpot(event.GetPosition().x - newPos.x, event.GetPosition().y - newPos.y);
-                    m_dragImage = new wxDragImage("Dragging some test text", wxCursor(wxCURSOR_HAND), hotSpot);
+                    m_dragImage = new wxDragImage("Dragging some test text", wxCursor(wxCURSOR_HAND));
                     break;
                 }
                 case SHAPE_DRAG_ICON:
                 {
-                    wxPoint hotSpot(event.GetPosition().x - newPos.x, event.GetPosition().y - newPos.y);
-
                     // Can anyone explain why this test is necessary,
                     // to prevent a gcc error?
 #ifdef __WXMOTIF__
@@ -206,36 +197,33 @@ void MyCanvas::OnMouseEvent(wxMouseEvent& event)
                     wxIcon icon(wxICON(dragicon));
 #endif
                     
-                    m_dragImage = new wxDragImage(icon, wxCursor(wxCURSOR_HAND), hotSpot);
+                    m_dragImage = new wxDragImage(icon, wxCursor(wxCURSOR_HAND));
                     break;
                 }
             }
 
-            bool fullScreen = FALSE;
-            if (wxGetApp().GetUseScreen())
-            {
-                newPos = ClientToScreen(newPos);
-                fullScreen = TRUE;
-            }
-
-            bool retValue;
+            bool fullScreen = wxGetApp().GetUseScreen();
 
-            if (fullScreen)
-                // This line uses the whole screen...
-                retValue = m_dragImage->BeginDrag(wxPoint(0, 0), this, TRUE);
-                // while this line restricts dragging to the parent frame.
-                // retValue = m_dragImage->BeginDrag(wxPoint(0, 0), this, GetParent());
-            else
-                retValue = m_dragImage->BeginDrag(wxPoint(0, 0), this);
+            // The offset between the top-left of the shape image and the current shape position
+            wxPoint beginDragHotSpot = m_dragStartPos - m_draggedShape->GetPosition();
+            
+            // Now we do this inside the implementation: always assume
+            // coordinates relative to the capture window (client coordinates)
 
-            if (!retValue)
+            //if (fullScreen)
+            //    beginDragHotSpot -= ClientToScreen(wxPoint(0, 0));
+            
+            if (!m_dragImage->BeginDrag(beginDragHotSpot, this, fullScreen))
             {
                 delete m_dragImage;
                 m_dragImage = (wxDragImage*) NULL;
                 m_dragMode = TEST_DRAG_NONE;
+                
+            } else
+            {
+                m_dragImage->Move(event.GetPosition());
+                m_dragImage->Show();
             }
-            m_dragImage->Move(newPos);
-            m_dragImage->Show();
         }
         else if (m_dragMode == TEST_DRAG_DRAGGING)
         {
@@ -272,16 +260,8 @@ void MyCanvas::OnMouseEvent(wxMouseEvent& event)
                 m_currentlyHighlighted->Draw(clientDC, wxINVERT);
             }
 
-            wxPoint newPos(m_draggedShape->GetPosition().x + (event.GetPosition().x - m_dragStartPos.x),
-                           m_draggedShape->GetPosition().y + (event.GetPosition().y - m_dragStartPos.y));
-
-            if (wxGetApp().GetUseScreen())
-            {
-                newPos = ClientToScreen(newPos);
-            }
-
             // Move and show the image again
-            m_dragImage->Move(newPos);
+            m_dragImage->Move(event.GetPosition());
 
             if (mustUnhighlightOld || mustHighlightNew)
                  m_dragImage->Show();
index 37071c5a036147f30c58c513f0b87c5206f5450f..40c71aba6ffec08dd94e77dad1f7096ac65d0c32 100644 (file)
@@ -94,42 +94,39 @@ void wxGenericDragImage::Init()
 ////////////////////////////////////////////////////////////////////////////
 
 // Create a drag image with a virtual image (need to override DoDrawImage, GetImageRect)
-bool wxGenericDragImage::Create(const wxCursor& cursor, const wxPoint& hotspot)
+bool wxGenericDragImage::Create(const wxCursor& cursor)
 {
     m_cursor = cursor;
-    m_hotspot = hotspot;
 
     return TRUE;
 }
 
 // Create a drag image from a bitmap and optional cursor
-bool wxGenericDragImage::Create(const wxBitmap& image, const wxCursor& cursor, const wxPoint& hotspot)
+bool wxGenericDragImage::Create(const wxBitmap& image, const wxCursor& cursor)
 {
     // We don't have to combine the cursor explicitly since we simply show the cursor
     // as we drag. This currently will only work within one window.
 
     m_cursor = cursor;
-    m_hotspot = hotspot;
     m_bitmap = image;
 
     return TRUE ;
 }
 
 // Create a drag image from an icon and optional cursor
-bool wxGenericDragImage::Create(const wxIcon& image, const wxCursor& cursor, const wxPoint& hotspot)
+bool wxGenericDragImage::Create(const wxIcon& image, const wxCursor& cursor)
 {
     // We don't have to combine the cursor explicitly since we simply show the cursor
     // as we drag. This currently will only work within one window.
 
     m_cursor = cursor;
-    m_hotspot = hotspot;
     m_icon = image;
 
     return TRUE ;
 }
 
 // Create a drag image from a string and optional cursor
-bool wxGenericDragImage::Create(const wxString& str, const wxCursor& cursor, const wxPoint& hotspot)
+bool wxGenericDragImage::Create(const wxString& str, const wxCursor& cursor)
 {
     wxFont font(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
 
@@ -170,7 +167,7 @@ bool wxGenericDragImage::Create(const wxString& str, const wxCursor& cursor, con
     bitmap = image.ConvertToBitmap();
 #endif
 
-    return Create(bitmap, cursor, hotspot);
+    return Create(bitmap, cursor);
 }
 
 // Create a drag image for the given tree control item
@@ -319,15 +316,19 @@ bool wxGenericDragImage::Move(const wxPoint& pt)
 {
     wxASSERT_MSG( (m_windowDC != (wxDC*) NULL), wxT("No window DC in wxGenericDragImage::Move()") );
 
+    wxPoint pt2(pt);
+    if (m_fullScreen)
+        pt2 = m_window->ClientToScreen(pt);
+
     // Erase at old position, then show at the current position
     wxPoint oldPos = m_position;
 
     bool eraseOldImage = (m_isDirty && m_isShown);
     
     if (m_isShown)
-        RedrawImage(oldPos - m_offset, pt - m_offset, eraseOldImage, TRUE);
+        RedrawImage(oldPos - m_offset, pt2 - m_offset, eraseOldImage, TRUE);
 
-    m_position = pt;
+    m_position = pt2;
 
     if (m_isShown)
         m_isDirty = TRUE;
index 10cedac42b117190d941e8e715fc0ab1c2b1676c..bff7fab2658d6f7ed54eed914cad6cd32f3bcc09 100644 (file)
@@ -102,7 +102,7 @@ void wxDragImage::Init()
 ////////////////////////////////////////////////////////////////////////////
 
 // Create a drag image from a bitmap and optional cursor
-bool wxDragImage::Create(const wxBitmap& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
+bool wxDragImage::Create(const wxBitmap& image, const wxCursor& cursor)
 {
     if ( m_hImageList )
         ImageList_Destroy(GetHimageList());
@@ -146,13 +146,12 @@ bool wxDragImage::Create(const wxBitmap& image, const wxCursor& cursor, const wx
         wxLogError(_("Couldn't add an image to the image list."));
     }
     m_cursor = cursor; // Can only combine with drag image after calling BeginDrag.
-    m_cursorHotspot = cursorHotspot;
 
     return (index != -1) ;
 }
 
 // Create a drag image from an icon and optional cursor
-bool wxDragImage::Create(const wxIcon& image, const wxCursor& cursor, const wxPoint& cursorHotspot)
+bool wxDragImage::Create(const wxIcon& image, const wxCursor& cursor)
 {
     if ( m_hImageList )
         ImageList_Destroy(GetHimageList());
@@ -184,13 +183,12 @@ bool wxDragImage::Create(const wxIcon& image, const wxCursor& cursor, const wxPo
     }
 
     m_cursor = cursor; // Can only combine with drag image after calling BeginDrag.
-    m_cursorHotspot = cursorHotspot;
 
     return (index != -1) ;
 }
 
 // Create a drag image from a string and optional cursor
-bool wxDragImage::Create(const wxString& str, const wxCursor& cursor, const wxPoint& cursorHotspot)
+bool wxDragImage::Create(const wxString& str, const wxCursor& cursor)
 {
     wxFont font(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
 
@@ -226,7 +224,7 @@ bool wxDragImage::Create(const wxString& str, const wxCursor& cursor, const wxPo
     image.SetMaskColour(255, 255, 255);
     bitmap = image.ConvertToBitmap();
 
-    return Create(bitmap, cursor, cursorHotspot);
+    return Create(bitmap, cursor);
 }
 
 // Create a drag image for the given tree control item
@@ -260,6 +258,7 @@ bool wxDragImage::BeginDrag(const wxPoint& hotspot, wxWindow* window, bool fullS
         m_boundingRect = * rect;
 
     bool ret = (ImageList_BeginDrag(GetHimageList(), 0, hotspot.x, hotspot.y) != 0);
+    //bool ret = (ImageList_BeginDrag(GetHimageList(), 0, 0, 0) != 0);
 
     if (!ret)
     {
@@ -282,6 +281,21 @@ bool wxDragImage::BeginDrag(const wxPoint& hotspot, wxWindow* window, bool fullS
             m_hCursorImageList = (WXHIMAGELIST) ImageList_Create(cxCursor, cyCursor, ILC_MASK, 1, 1);
         }
 
+        // See if we can find the cursor hotspot
+        wxPoint curHotSpot(hotspot);
+
+#if 0
+        ICONINFO iconInfo;
+        if (::GetIconInfo((HICON) (HCURSOR) m_cursor.GetHCURSOR(), & iconInfo) != 0)
+        {
+            curHotSpot.x -= iconInfo.xHotspot;
+            curHotSpot.y -= iconInfo.yHotspot;
+        }
+#endif
+        wxString msg;
+        msg.Printf("Hotspot = %d, %d", curHotSpot.x, curHotSpot.y);
+        wxLogDebug(msg);
+
         // First add the cursor to the image list
         HCURSOR hCursor = (HCURSOR) m_cursor.GetHCURSOR();
         int cursorIndex = ImageList_AddIcon((HIMAGELIST) m_hCursorImageList, (HICON) hCursor);
@@ -290,18 +304,18 @@ bool wxDragImage::BeginDrag(const wxPoint& hotspot, wxWindow* window, bool fullS
 
         if (cursorIndex != -1)
         {
-            ImageList_SetDragCursorImage((HIMAGELIST) m_hCursorImageList, cursorIndex, m_cursorHotspot.x, m_cursorHotspot.y);
+            ImageList_SetDragCursorImage((HIMAGELIST) m_hCursorImageList, cursorIndex, curHotSpot.x, curHotSpot.y);
         }
 #endif
     }
 
-    m_window = window;
-
 #if !wxUSE_SIMPLER_DRAGIMAGE
     if (m_cursor.Ok())
         ::ShowCursor(FALSE);
 #endif
 
+    m_window = window;
+
     ::SetCapture(GetHwndOf(window));
 
     return TRUE;
@@ -376,6 +390,10 @@ bool wxDragImage::Move(const wxPoint& pt)
         // Subtract the (negative) values, i.e. add a small increment
         pt2.x -= rect.left; pt2.y -= rect.top;
     }
+    else if (m_window && m_fullScreen)
+    {
+        pt2 = m_window->ClientToScreen(pt2);
+    }
 
     bool ret = (ImageList_DragMove( pt2.x, pt2.y ) != 0);