X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d9317fd47263a9521466156d7bf0f7988000bf15..7d0cfe71cf84a7af4ea4f415964767dcb7d1dd66:/src/msw/enhmeta.cpp diff --git a/src/msw/enhmeta.cpp b/src/msw/enhmeta.cpp index 6602ce9a24..73c04b84db 100644 --- a/src/msw/enhmeta.cpp +++ b/src/msw/enhmeta.cpp @@ -6,7 +6,7 @@ // Created: 13.01.00 // RCS-ID: $Id$ // Copyright: (c) 2000 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "enhmeta.h" #endif @@ -36,6 +36,7 @@ #endif //WX_PRECOMP #include "wx/metafile.h" +#include "wx/clipbrd.h" #include "wx/msw/private.h" @@ -161,6 +162,18 @@ wxSize wxEnhMetaFile::GetSize() const return size; } +bool wxEnhMetaFile::SetClipboard(int WXUNUSED(width), int WXUNUSED(height)) +{ +#if wxUSE_DRAG_AND_DROP + wxCHECK_MSG( m_hMF, FALSE, _T("can't copy invalid metafile to clipboard") ); + + return wxTheClipboard->AddData(new wxEnhMetaFileDataObject(*this)); +#else // !wxUSE_DRAG_AND_DROP + wxFAIL_MSG(_T("not implemented")); + return FALSE; +#endif // wxUSE_DRAG_AND_DROP/!wxUSE_DRAG_AND_DROP +} + // ---------------------------------------------------------------------------- // wxEnhMetaFileDC // ---------------------------------------------------------------------------- @@ -170,8 +183,8 @@ wxEnhMetaFileDC::wxEnhMetaFileDC(const wxString& filename, const wxString& description) { ScreenHDC hdcRef; - - RECT rect, *pRect; + RECT rect; + RECT *pRect; if ( width && height ) { rect.top = @@ -181,7 +194,7 @@ wxEnhMetaFileDC::wxEnhMetaFileDC(const wxString& filename, // CreateEnhMetaFile() wants them in HIMETRIC PixelToHIMETRIC(&rect.right, &rect.bottom); - + pRect = ▭ } else @@ -221,6 +234,8 @@ wxEnhMetaFileDC::~wxEnhMetaFileDC() m_hDC = 0; } +#if wxUSE_DRAG_AND_DROP + // ---------------------------------------------------------------------------- // wxEnhMetaFileDataObject // ---------------------------------------------------------------------------- @@ -377,4 +392,46 @@ bool wxEnhMetaFileDataObject::SetData(const wxDataFormat& format, return TRUE; } +// ---------------------------------------------------------------------------- +// wxEnhMetaFileSimpleDataObject +// ---------------------------------------------------------------------------- + +size_t wxEnhMetaFileSimpleDataObject::GetDataSize() const +{ + // we pass data by handle and not HGLOBAL + return 0u; +} + +bool wxEnhMetaFileSimpleDataObject::GetDataHere(void *buf) const +{ + wxCHECK_MSG( m_metafile.Ok(), FALSE, _T("copying invalid enh metafile") ); + + HENHMETAFILE hEMF = (HENHMETAFILE)m_metafile.GetHENHMETAFILE(); + + HENHMETAFILE hEMFCopy = ::CopyEnhMetaFile(hEMF, NULL); + if ( !hEMFCopy ) + { + wxLogLastError(_T("CopyEnhMetaFile")); + + return FALSE; + } + + *(HENHMETAFILE *)buf = hEMFCopy; + return TRUE; +} + +bool wxEnhMetaFileSimpleDataObject::SetData(size_t WXUNUSED(len), + const void *buf) +{ + HENHMETAFILE hEMF = *(HENHMETAFILE *)buf; + + wxCHECK_MSG( hEMF, FALSE, _T("pasting invalid enh metafile") ); + m_metafile.SetHENHMETAFILE((WXHANDLE)hEMF); + + return TRUE; +} + + +#endif // wxUSE_DRAG_AND_DROP + #endif // wxUSE_ENH_METAFILE