]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/cursor.cpp
Always send an erase event to satisfy some users...
[wxWidgets.git] / src / msw / cursor.cpp
index 0f7ce4ac2a91da7e1a7c7fbd0fc2ce18c882dddf..09ab2ba32e6e7a8356dbe72eb43d6785d2d2bf75 100644 (file)
@@ -39,7 +39,9 @@
 
 #include "wx/module.h"
 #include "wx/msw/private.h"
+#ifndef __WXMICROWIN__
 #include "wx/msw/dib.h"
+#endif
 
 #if wxUSE_RESOURCE_LOADING_IN_MSW
     #include "wx/msw/curico.h"
@@ -50,7 +52,7 @@
 // wxWin macros
 // ----------------------------------------------------------------------------
 
-IMPLEMENT_DYNAMIC_CLASS(wxCursor, wxCursorBase)
+IMPLEMENT_DYNAMIC_CLASS(wxCursor, wxGDIObject)
 
 // ----------------------------------------------------------------------------
 // globals
@@ -94,15 +96,17 @@ wxCursorRefData::wxCursorRefData()
   m_width = 32;
   m_height = 32;
 
-  m_destroyCursor = FALSE;
+  m_destroyCursor = TRUE;
 }
 
 void wxCursorRefData::Free()
 {
     if ( m_hCursor )
     {
+#ifndef __WXMICROWIN__
         if ( m_destroyCursor )
             ::DestroyCursor((HCURSOR)m_hCursor);
+#endif
 
         m_hCursor = 0;
     }
@@ -128,11 +132,12 @@ wxCursor::wxCursor(const wxString& cursor_file,
                    long flags,
                    int hotSpotX, int hotSpotY)
 {
+#ifdef __WXMICROWIN__
+    m_refData = NULL;
+#else
     wxCursorRefData *refData = new wxCursorRefData;
     m_refData = refData;
 
-    refData->m_destroyCursor = FALSE;
-
     if (flags == wxBITMAP_TYPE_CUR_RESOURCE)
     {
 #ifdef __WIN95__
@@ -148,7 +153,6 @@ wxCursor::wxCursor(const wxString& cursor_file,
 #else
 #if wxUSE_RESOURCE_LOADING_IN_MSW
         refData->m_hCursor = (WXHCURSOR) ReadCursorFile(WXSTRINGCAST cursor_file, wxGetInstance(), &refData->m_width, &refData->m_height);
-        refData->m_destroyCursor = TRUE;
 #endif
 #endif
     }
@@ -156,7 +160,6 @@ wxCursor::wxCursor(const wxString& cursor_file,
     {
 #if wxUSE_RESOURCE_LOADING_IN_MSW
         refData->m_hCursor = (WXHCURSOR) IconToCursor(WXSTRINGCAST cursor_file, wxGetInstance(), hotSpotX, hotSpotY, &refData->m_width, &refData->m_height);
-        refData->m_destroyCursor = TRUE;
 #endif
     }
     else if (flags == wxBITMAP_TYPE_BMP)
@@ -173,7 +176,6 @@ wxCursor::wxCursor(const wxString& cursor_file,
         pnt.x = hotSpotX;
         pnt.y = hotSpotY;
         refData->m_hCursor = (WXHCURSOR) MakeCursorFromBitmap(wxGetInstance(), hBitmap, &pnt);
-        refData->m_destroyCursor = TRUE;
         DeleteObject(hBitmap);
 #endif
     }
@@ -181,16 +183,26 @@ wxCursor::wxCursor(const wxString& cursor_file,
 #if WXWIN_COMPATIBILITY_2
     refData->SetOk();
 #endif // WXWIN_COMPATIBILITY_2
+
+#endif
 }
 
 // Cursors by stock number
 wxCursor::wxCursor(int cursor_type)
 {
+#ifdef __WXMICROWIN__
+    m_refData = NULL;
+#else
   wxCursorRefData *refData = new wxCursorRefData;
   m_refData = refData;
 
   switch (cursor_type)
   {
+    case wxCURSOR_ARROWWAIT:
+#ifndef __WIN16__
+      refData->m_hCursor = (WXHCURSOR) LoadCursor((HINSTANCE) NULL, IDC_APPSTARTING);
+      break;
+#endif
     case wxCURSOR_WAIT:
       refData->m_hCursor = (WXHCURSOR) LoadCursor((HINSTANCE) NULL, IDC_WAIT);
       break;
@@ -303,6 +315,11 @@ wxCursor::wxCursor(int cursor_type)
       refData->m_hCursor = (WXHCURSOR) LoadCursor((HINSTANCE) NULL, IDC_ARROW);
       break;
   }
+
+  // no need to destroy the stock cursors
+  // TODO: check this
+  //m_refData->m_destroyCursor = FALSE;
+#endif
 }
 
 wxCursor::~wxCursor()
@@ -322,7 +339,9 @@ void wxSetCursor(const wxCursor& cursor)
 {
     if ( cursor.Ok() )
     {
+#ifndef __WXMICROWIN__
         ::SetCursor(GetHcursorOf(cursor));
+#endif
 
         if ( gs_globalCursor )
             *gs_globalCursor = cursor;