bool wxIsClipboardFormatAvailable(wxDataFormat dataFormat)
{
- // for bitmaps, DIBs will also do
- return (::IsClipboardFormatAvailable(dataFormat) != 0) ||
- (dataFormat.GetFormatId() == CF_BITMAP &&
- ::IsClipboardFormatAvailable(CF_DIB));
+ if ( ::IsClipboardFormatAvailable(dataFormat) )
+ {
+ // ok from the first try
+ return TRUE;
+ }
+
+ // for several standard formats, we can convert from some other ones too
+ switch ( dataFormat.GetFormatId() )
+ {
+ // for bitmaps, DIBs will also do
+ case CF_BITMAP:
+ return ::IsClipboardFormatAvailable(CF_DIB) != 0;
+
+#if wxUSE_ENH_METAFILE && !defined(__WIN16__)
+ case CF_METAFILEPICT:
+ return ::IsClipboardFormatAvailable(CF_ENHMETAFILE) != 0;
+#endif // wxUSE_ENH_METAFILE
+
+ default:
+ return FALSE;
+ }
}
bool wxSetClipboardData(wxDataFormat dataFormat,
break;
}
-#if wxUSE_METAFILE
+ // 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
+ // but IMNSHO it is completely broken.
+#if wxUSE_METAFILE && !defined(wxMETAFILE_IS_ENH)
case wxDF_METAFILE:
{
wxMetafile *wxMF = (wxMetafile *)data;
handle = SetClipboardData(CF_METAFILEPICT, data);
break;
}
-#endif
+#endif // wxUSE_METAFILE
+
+#if wxUSE_ENH_METAFILE && !defined(__WIN16__)
+ case wxDF_ENHMETAFILE:
+ {
+ wxEnhMetaFile *emf = (wxEnhMetaFile *)data;
+ wxEnhMetaFile emfCopy = *emf;
+
+ handle = SetClipboardData(CF_ENHMETAFILE,
+ (void *)emfCopy.GetHENHMETAFILE());
+ }
+ break;
+#endif // wxUSE_ENH_METAFILE
+
case CF_SYLK:
case CF_DIF:
case CF_TIFF:
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;
}
bool wxClipboard::SetData( wxDataObject *data )
{
+#if !wxUSE_OLE_CLIPBOARD
(void)wxEmptyClipboard();
+#endif // wxUSE_OLE_CLIPBOARD
if ( data )
return AddData(data);
formatEtc.ptd = NULL;
formatEtc.dwAspect = DVASPECT_CONTENT;
formatEtc.lindex = -1;
- formatEtc.tymed = TYMED_HGLOBAL;
size_t nSupportedFormats = supportedFormats.GetCount();
for ( size_t n = 0; !result && (n < nSupportedFormats); n++ )
STGMEDIUM medium;
formatEtc.cfFormat = supportedFormats[n];
+ // use the appropriate tymed
+ switch ( formatEtc.cfFormat )
+ {
+ case CF_BITMAP:
+ formatEtc.tymed = TYMED_GDI;
+ break;
+
+ case CF_METAFILEPICT:
+ formatEtc.tymed = TYMED_MFPICT;
+ break;
+
+ case CF_ENHMETAFILE:
+ formatEtc.tymed = TYMED_ENHMF;
+ break;
+
+ default:
+ formatEtc.tymed = TYMED_HGLOBAL;
+ }
+
// try to get data
hr = pDataObject->GetData(&formatEtc, &medium);
if ( FAILED(hr) )