// headers
// ---------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "clipbrd.h"
#endif
#include "wx/clipbrd.h"
#include <string.h>
-#include <windows.h>
#include "wx/msw/private.h"
-#ifndef __WXMICROWIN__
+#if wxUSE_WXDIB
#include "wx/msw/dib.h"
#endif
#include "wx/dataobj.h"
#endif
-#if wxUSE_OLE
+#if wxUSE_OLE && !defined(__WXWINCE__)
// use OLE clipboard
#define wxUSE_OLE_CLIPBOARD 1
#else // !wxUSE_DATAOBJ
#include <ole2.h>
#endif // wxUSE_OLE_CLIPBOARD
-#ifdef __WIN16__
- #define memcpy hmemcpy
-#endif
-
// ===========================================================================
// implementation
// ===========================================================================
case CF_BITMAP:
return ::IsClipboardFormatAvailable(CF_DIB) != 0;
-#if wxUSE_ENH_METAFILE && !defined(__WIN16__)
+#if wxUSE_ENH_METAFILE && !defined(__WIN16__) && !defined(__WXWINCE__)
case CF_METAFILEPICT:
return ::IsClipboardFormatAvailable(CF_ENHMETAFILE) != 0;
#endif // wxUSE_ENH_METAFILE
}
}
+
bool wxSetClipboardData(wxDataFormat dataFormat,
const void *data,
int width, int height)
break;
}
+#if wxUSE_WXDIB
case wxDF_DIB:
{
-#if wxUSE_IMAGE_LOADING_IN_MSW
wxBitmap *bitmap = (wxBitmap *)data;
- HBITMAP hBitmap = (HBITMAP)bitmap->GetHBITMAP();
- // NULL palette means to use the system one
- HANDLE hDIB = wxBitmapToDIB(hBitmap, (HPALETTE)NULL);
- handle = SetClipboardData(CF_DIB, hDIB);
-#endif // wxUSE_IMAGE_LOADING_IN_MSW
+
+ HGLOBAL hDIB = wxDIB::ConvertFromBitmap(GetHbitmapOf(*bitmap));
+ if ( hDIB )
+ {
+ handle = ::SetClipboardData(CF_DIB, hDIB);
+ }
break;
}
+#endif
// VZ: I'm told that this code works, but it doesn't seem to work for me
- // and, anyhow, I'd be highly surprized if it did. So I leave it here
+ // and, anyhow, I'd be highly surprised if it did. So I leave it here
// but IMNSHO it is completely broken.
-#if wxUSE_METAFILE && !defined(wxMETAFILE_IS_ENH)
+#if wxUSE_METAFILE && !defined(wxMETAFILE_IS_ENH) && !defined(__WXWINCE__)
case wxDF_METAFILE:
{
wxMetafile *wxMF = (wxMetafile *)data;
}
#endif // wxUSE_METAFILE
-#if wxUSE_ENH_METAFILE && !defined(__WIN16__)
+#if wxUSE_ENH_METAFILE && !defined(__WIN16__) && !defined(__WXWINCE__)
case wxDF_ENHMETAFILE:
{
wxEnhMetaFile *emf = (wxEnhMetaFile *)data;
switch ( dataFormat )
{
+#ifndef __WXWINCE__
case wxDF_BITMAP:
{
BITMAP bm;
wxBM->SetWidth(bm.bmWidth);
wxBM->SetHeight(bm.bmHeight);
wxBM->SetDepth(bm.bmPlanes);
-#if WXWIN_COMPATIBILITY_2
- wxBM->SetOk(TRUE);
-#endif // WXWIN_COMPATIBILITY_2
retval = wxBM;
break;
}
-
+#endif
case wxDF_METAFILE:
case CF_SYLK:
case CF_DIF:
if (!s)
break;
- LPSTR lpGlobalMemory = (LPSTR)::GlobalLock(hGlobalMemory);
+ LPSTR lpGlobalMemory = (LPSTR) GlobalLock(hGlobalMemory);
memcpy(s, lpGlobalMemory, hsize);
- ::GlobalUnlock(hGlobalMemory);
+ GlobalUnlock(hGlobalMemory);
retval = s;
break;
if ( !buf )
break;
- LPSTR lpGlobalMemory = (LPSTR)::GlobalLock(hGlobalMemory);
+ LPSTR lpGlobalMemory = (LPSTR) GlobalLock(hGlobalMemory);
memcpy(buf, lpGlobalMemory, size);
- ::GlobalUnlock(hGlobalMemory);
+ GlobalUnlock(hGlobalMemory);
retval = buf;
break;
wxClipboard::wxClipboard()
{
m_clearOnExit = FALSE;
+ m_isOpened = FALSE;
}
wxClipboard::~wxClipboard()
bool wxClipboard::Open()
{
// OLE opens clipboard for us
+ m_isOpened = TRUE;
#if wxUSE_OLE_CLIPBOARD
return TRUE;
#else
bool wxClipboard::IsOpened() const
{
#if wxUSE_OLE_CLIPBOARD
- return TRUE;
+ return m_isOpened;
#else
return wxIsClipboardOpened();
#endif
// This didn't compile, of course
// return wxSetClipboardData(data);
// TODO
- wxLogError("Not implemented.");
+ wxLogError(wxT("Not implemented."));
return FALSE;
}
}
void wxClipboard::Close()
{
+ m_isOpened = FALSE;
// OLE closes clipboard for us
#if !wxUSE_OLE_CLIPBOARD
wxCloseClipboard();
case CF_BITMAP:
formatEtc.tymed = TYMED_GDI;
break;
-
+#ifndef __WXWINCE__
case CF_METAFILEPICT:
formatEtc.tymed = TYMED_MFPICT;
break;
case CF_ENHMETAFILE:
formatEtc.tymed = TYMED_ENHMF;
break;
-
+#endif
default:
formatEtc.tymed = TYMED_HGLOBAL;
}
if ( !s )
return FALSE;
- textDataObject.SetText(s);
+ textDataObject.SetText(wxString::FromAscii(s));
delete [] s;
return TRUE;